मैं एक shared_ptr
में एक ऑब्जेक्ट (TTF_Font
) संग्रहीत कर रहा हूं जो मुझे किसी तृतीय-पक्ष API से प्रदान किया जाता है। मैं ऑब्जेक्ट पर नया या हटा नहीं सकता, इसलिए shared_ptr
को "फ्रीिंग" फ़ैक्टर भी प्रदान किया जाता है।एक बढ़ावा देने के लिए .reset() का उपयोग :: एकमात्र स्वामित्व के साथ shared_ptr
screenFont.reset();
और फिर screenFont
(वास्तविक shared_ptr
वस्तु) स्वाभाविक रूप से नष्ट कर दिया जाना है:
// Functor
struct 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());
हैं, तो बाद में, मैं की जरूरत है इस वस्तु को स्पष्ट रूप से मुक्त करने के लिए ऐसा करने के लिए सही है?
प्रतिक्रिया के लिए धन्यवाद। मेरे मामले में, मुझे इसे किसी अन्य संसाधन से पहले स्पष्ट रूप से मुक्त करना होगा, और यह ऐसा करने का एकमात्र तरीका था। –
बस स्पष्ट होने के लिए - रीसेट() होल्ड संसाधन को तब तक मुक्त नहीं करेगा जब तक कि यह शून्य पर गिरने वाले रिफॉउंट में न हो - यह refcount को शून्य पर मजबूर नहीं करता है। –