返回指向同一变量的指针会泄漏内存吗?

Lia*_*kos 1 c++ memory pointers sdl sdl-2

这段代码会泄漏内存吗?

SDL_Texture* texture;
SDL_Surface* surface;
int infinity = 99999999;
for (int i=0; i<infinity; i++) {
   surface = IMG_Load("path/to/image.png");
   texture = SDL_CreateTextureFromSurface(renderer, surface);
}
Run Code Online (Sandbox Code Playgroud)

在重新分配变量之前,我是否需要每次都消除(从内存中清除)表面和纹理?

lcs*_*lcs 6

是.SDL_CreateTextureFromSurface有一个必须调用的对应SDL_DestroyTextureSDL_FreeSurface方法.

请注意页面上的 SDL_CreateTextureFromSurface

此功能不会修改或释放曲面.

根据@bathsheba,std::unique_ptr可以使用a 进行删除.

auto SDLTextureDeleter = [](SDL_Texture* pTexture) { if(pTexture) SDL_DestroyTexture(pTexture); };
std::unique_ptr<SDL_Texture, decltype(SDLTextureDelter)>(texture, SDLTextureDeleter); // This will call SDL_DestroyTexture when the unique pointer is destructed.
Run Code Online (Sandbox Code Playgroud)

对于加分,你可以添加一个专门用于std::default_delete<T>namespace std该处理SDL_****的指针和避免seperately声明缺失者.

  • 根据@ Bathsheba的评论,您可以创建一个`std :: unique_ptr`来处理破坏,只需很少的代码.对于`IMG_Load`和`SDL_FreeSurface`函数,您可以执行以下操作:`std :: unique_ptr <SDL_Surface,decltype(&SDL_FreeSurface)> surface {IMG_Load("path/to/image.png"),SDL_FreeSurface};` (4认同)