अक्सर, "यह निर्भर करता है"। नाम के योग्य किसी भी ऑपरेटिंग सिस्टम में, जब आपकी प्रक्रिया निकलती है, तो प्रक्रिया के भीतर स्थानीय रूप से उपयोग की जाने वाली सभी मेमोरी और अन्य संसाधनों को रिलीज़ किया जाएगा। आपको बस इसके बारे में चिंता करने की ज़रूरत नहीं है।
हालांकि, यदि आपका सिंगलटन अपनी प्रक्रिया के बाहर जीवन भर के साथ संसाधन आवंटित कर रहा है (शायद एक फ़ाइल, नामित म्यूटेक्स, या कुछ समान) तो आपको उचित सफाई पर विचार करने की आवश्यकता है।
आरएआईआई आपकी मदद करेंगे। आप इस तरह से एक परिदृश्य है:
class Tempfile
{
Tempfile() {}; // creates a temporary file
virtual ~Tempfile(); // close AND DELETE the temporary file
};
Tempfile &singleton()
{
static Tempfile t;
return t;
}
... तो आप को आश्वस्त किया जा सकता है कि अपने अस्थायी फ़ाइल बंद कर दिया और फिर भी अपने आवेदन बाहर निकलता है हटा दिया जाएगा। However, this is NOT thread-safe, and the order of object deletion may not be what you expect or require.
हालांकि, अगर आपका सिंगलटन इस
Tempfile &singleton()
{
static Tempfile *t = NULL;
if (t == NULL)
t = new Tempfile();
return *t;
}
तरह कार्यान्वित किया जाता है ... तो आप एक अलग स्थिति है। आपके tempfile द्वारा उपयोग की जाने वाली स्मृति को पुनः दावा किया जाएगा, लेकिन फ़ाइल को हटाया नहीं जाएगा क्योंकि विनाशक को नहीं बुलाया जाएगा।
यदि आप मुख्य रिटर्न के बाद अपनी स्थिर वस्तुओं को नष्ट करने के लिए रनटाइम लाइब्रेरी पर भरोसा करते हैं, और आप उम्मीद करते हैं कि एक (विंडोज) डीएलएल में कोड का उपयोग करना संभव हो, तो आप डेलमेन के दौरान कोड चला रहे हैं, और अधिकांश चीजें जो आप कर सकते हैं करना पसंद है असुरक्षित। –