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);
}
在重新分配变量之前,我是否需要每次都消除(从内存中清除)表面和纹理?
是.SDL_CreateTextureFromSurface有一个必须调用的对应SDL_DestroyTexture和SDL_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.
对于加分,你可以添加一个专门用于std::default_delete<T>在namespace std该处理SDL_****的指针和避免seperately声明缺失者.
| 归档时间: | 
 | 
| 查看次数: | 171 次 | 
| 最近记录: |