我将对象 ( TTF_Font ) 存储在从第三方 API 提供给我的 shared_ptr 中。我不能在对象上使用 new 或 delete,所以 shared_ptr 也提供了一个“释放”仿函数。// Functorstruct CloseFont{ void operator()(TTF_Font* font) const { if(font != NULL) { TTF_CloseFont(font); } }};boost::shared_ptr<TTF_Font> screenFont;screenFont = boost::shared_ptr<TTF_Font>( TTF_OpenFont("slkscr.ttf", 8), CloseFont() );如果稍后我需要明确地释放这个对象,这样做是否正确:screenFont.reset();然后让screenFont(实际的shared_ptr对象)自然销毁? 最佳答案 shared_ptr::reset() 会将引用计数减一。如果这导致计数降为零,则 shared_ptr 指向的资源将被释放。所以我认为你的答案是,是的,这会奏效。或者您可以简单地让 screenFont 变量由于超出范围或其他原因而被破坏,如果这就是即将发生的事情。需要说明的是,shared_ptr的正常用法是你让它自然销毁,当它自然降为零时,它会处理refcount并释放资源。仅当您需要在 shared_ptr 自然销毁之前释放共享资源的特定实例时才需要 reset()。
10-07 19:46
查看更多