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

6
这篇关于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
    }

我应该在退出前告诉终止函数销毁渲染器、窗口、纹理等吗?
2个回答

2

与“退出程序前是否应该释放已分配的内存”相同的问题。是的,如果SDL / X11 / GL /等终止代码没有错误-所有内容都将被释放。但我认为您没有理由不想自己这样做。

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


0

我个人在编程中遇到过SDL_TEXTURE的问题,导致程序运行时出现内存泄漏,并且当程序泄漏了约2GB的RAM时,图片显示突然停止,而通常情况下它只使用37MB的RAM。

SDL_DestroyTexture(texture);

每次使用渲染器显示不同图片后,只需调用此函数,就可以消除内存泄漏问题。


这个问题询问的是在“退出程序”之前销毁东西,而不是在程序运行时销毁。 - HolyBlackCat
我的回答的意思是,由于缺少SDL_DestroyTexture,程序根本没有达到退出状态。 - Rolandas Ulevicius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接