如何在智能指针上手动调用析构函数?
How to Manually call a Destructor on a Smart Pointer?
我在制作的游戏中有 shared_ptr
对应 SDL_Texture
。我想使用共享指针能够在多个对象上使用相同的纹理而不会泄漏任何内存。我从一个方法
得到了共享指针 return
std::shared_ptr<SDL_Texture> RenderWindow::loadTexture(const char *filePath) {
return std::shared_ptr<SDL_Texture>(IMG_LoadTexture(renderer, filePath),
SDL_DestroyTexture);
}
然而,当我在游戏中使用完纹理后,我希望能够手动调用它的析构函数,即 SDL_DestroyTexture
但是当我需要它时它不会被调用并且它占用了大量内存。有什么方法可以告诉它在我需要时调用它的析构函数吗?
您可以通过在 shared_ptr 上调用 reset()
来释放对象的所有权。如果那是持有指针的最后一个,shared_ptr 的删除成员将用于销毁对象。
我在制作的游戏中有 shared_ptr
对应 SDL_Texture
。我想使用共享指针能够在多个对象上使用相同的纹理而不会泄漏任何内存。我从一个方法
std::shared_ptr<SDL_Texture> RenderWindow::loadTexture(const char *filePath) {
return std::shared_ptr<SDL_Texture>(IMG_LoadTexture(renderer, filePath),
SDL_DestroyTexture);
}
然而,当我在游戏中使用完纹理后,我希望能够手动调用它的析构函数,即 SDL_DestroyTexture
但是当我需要它时它不会被调用并且它占用了大量内存。有什么方法可以告诉它在我需要时调用它的析构函数吗?
您可以通过在 shared_ptr 上调用 reset()
来释放对象的所有权。如果那是持有指针的最后一个,shared_ptr 的删除成员将用于销毁对象。