我将一个object(TTF_Font
)存储在shared_ptr
从第三方API提供给我的对象中.我不能在对象上使用new或delete,因此shared_ptr
也提供了一个"freeing"仿函数.
// Functor struct CloseFont { void operator()(TTF_Font* font) const { if(font != NULL) { TTF_CloseFont(font); } } }; boost::shared_ptrscreenFont; screenFont = boost::shared_ptr ( TTF_OpenFont("slkscr.ttf", 8), CloseFont() );
如果,稍后,我需要明确释放此对象,这样做是正确的:
screenFont.reset();
然后让screenFont
(实际shared_ptr
物体)自然地被摧毁?
shared_ptr <> :: reset()会将引用计数减一.如果这导致计数降至零,则将释放shared_ptr <>指向的资源.
所以我认为你的答案是肯定会有效的.或者你可以简单地让screenFont变量因为掉出范围或其他什么而被破坏,如果那就是即将发生的事情.
要清楚的是,shared_ptr <>的正常用法是让它自然地被破坏,并且当它自然地降到零时它将处理refcount并释放资源.只有在shared_ptr <>被自然销毁之前需要释放共享资源的特定实例时,才需要reset().