我应该确保在退出程序之前销毁SDL 2.0对象(渲染器,窗口,纹理等)吗?

det*_*ite 5 c++ sdl sdl-2

关于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
    }
Run Code Online (Sandbox Code Playgroud)

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

kel*_*tar 2

与“我应该在退出程序之前释放已分配的内存”相同的问题吗?是的,如果 SDL/X11/GL/等没有错误。完成代码 - 无论如何,所有内容都会被释放。但我认为你没有理由不想自己这样做。

当然,如果您崩溃而不是退出 - 很可能有些事情不会完成,例如您不会将显示返回到本机桌面分辨率。