如何手动调用智能指针的析构函数?

Gol*_*d87 2 c++ sdl-2

我正在制作的游戏中有一个shared_ptrfor 。SDL_Texture我想使用共享指针以便能够在多个对象上使用相同的纹理而不泄漏任何内存。我从一个方法返回共享指针

std::shared_ptr<SDL_Texture> RenderWindow::loadTexture(const char *filePath) {

    return std::shared_ptr<SDL_Texture>(IMG_LoadTexture(renderer, filePath),
            SDL_DestroyTexture);
}
Run Code Online (Sandbox Code Playgroud)

然而,当我在游戏中使用完纹理后,我希望能够手动调用它的析构函数,但是SDL_DestroyTexture当我需要它时它不会被调用,并且它会占用大量内存。有什么方法可以告诉它在我想要的时候调用它的析构函数吗?

BoP*_*BoP 8

reset()您可以通过调用shared_ptr来释放对象的所有权。如果这是最后一个持有该指针的对象,则将使用shared_ptr 的删除器成员来销毁该对象。

https://en.cppreference.com/w/cpp/memory/shared_ptr/reset

  • @Gold87 - 如果存在剩余引用(由其他“shared_ptr”),则将不会调用所包含对象的析构函数。这或多或少就是“shared_ptr”的目的——在保留对托管对象的任何引用的同时保持托管对象的活动状态。 (2认同)