c++ - 我是否应该确保在退出程序之前销毁 SDL 2.0 对象(渲染器、窗口、纹理等)?

标签 c++ sdl sdl-2

This SDL 2.0 教程使用从 main 返回的代码,而不首先破坏任何资源指针:

int main(int argc, char** argv){
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1){
        std::cout << SDL_GetError() << std::endl;
        return 1; 
    }

    window = SDL_CreateWindow("Lesson 2", SDL_WINDOWPOS_CENTERED, 
        SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
    if (window == nullptr){
        std::cout << SDL_GetError() << std::endl;
        return 2; //this
    }
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED 
        | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == nullptr){
        std::cout << SDL_GetError() << std::endl;
        return 3; //and this too
    }

我应该在退出前将我的终止函数告诉 DestroyRenderer、DestroyWindow、DestroyTexture 等吗?

最佳答案

与“我应该在退出程序之前释放我分配的内存”的问题相同。是的,如果 SDL/X11/GL/etc 中没有错误。完成代码 - 无论如何都将被释放。但我看不出您不应该自己这样做的原因。

当然,如果您崩溃而不是退出 - 很有可能有些事情无法完成,例如您不会将显示恢复为 native 桌面分辨率。

关于c++ - 我是否应该确保在退出程序之前销毁 SDL 2.0 对象(渲染器、窗口、纹理等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18886204/

相关文章:

c++ - 声明从具有虚函数的基类派生的对象时出现错误 c2143 和 c4430

android - 我可以使用 C 或 C++ 创建 APK 吗?

c++ - Windows CE MessageBox 不显示 unicode 文本和图标透明度

c++ - 为什么在遍历此字符串时会出现段错误?

c++ - 在 glGenTextures 上获取 EXC_BAD_ACCESS

c++ - 查找文件夹中所有文件的文件路径

c++ - SDL2 在 OSX 上从不同线程创建纹理

c++ - 如何将 opengl 3.3 渲染成 SDL2 纹理?

c++ - Apple clang 和 C++20 运算符歧义与继承的比较运算符

c++ - 是什么导致了这个运行时错误,我该如何纠正它?