आप यहाँ दो समाधान है:
- हटाना न हटाएँ यह (आप, सही सी में हैं ++, आप नए का उपयोग करें और उन्हें हटाना;?)) । लगभग सभी ओएस आज आवेदन समाप्त होने के बाद भी एप्लिकेशन द्वारा आवंटित स्मृति को "मुक्त" करेंगे। लेकिन यह एक अच्छा समाधान नहीं है, जो उदाहरण के लिए पहचानने के लिए मेमोरी लीक को कठिन बनाता है।
- अपने पॉइंटर को कक्षा (सदस्य के रूप में) में एकीकृत करें, फिर इस कक्षा का उपयोग अपनी स्थिरता के प्रकार के रूप में करें। इस तरह, आप जानते हैं कि कक्षा के विनाशक को आवेदन के अंत में बुलाया जाएगा। फिर आप विनाशक में अपना डेटा हटा दें और काम पूरा हो गया है और साफ है। वह आरएआईआई की शक्ति है।
मेरा सुझाव है कि आप 2 करते हैं, यह करने के लिए यह वास्तव में एक साफ तरीका है।
यहां एक साधारण उदाहरण है। इसके बजाय ऐसा करने से
static Thing* things = new Thing(); // or whatever way to initialize, here or in a specific function
आप ऐसा करेंगे:
class ThingManager // or whatever name you like
{
public:
ThingManager(Thing* thing) : m_thing(thing) { }//or create it here? whatever solution suits your way of creating the data
~ThingManager() { delete m_thing; } // THAT's the important part!
Thing* instance() const { return m_thing; } // or whatever accessor you need, if you need one
private:
Thing* m_thing;
};
और फिर
static ManagedThing thing; // now i can access it via thing.instance()
जब कार्यक्रम समाप्त होता है, स्थिर चर (कि अब और सूचक नहीं है) नष्ट कर दिया जाएगा और यह विनाशक ऐसा करने के लिए बुलाया जाएगा।
यह आपको यह बताने के लिए लिखा गया है कि आप यह कैसे कर सकते हैं।
ध्वनि आप की तरह स्मार्ट संकेत बदलने की कोशिश कर रहे हैं? –
यह समस्या उन मुद्दों में से एक है जो सिंगलेट्स को लागू करते समय होती हैं (http://en.wikipedia.org/wiki/Singleton_pattern)। @ Klaim का कोड नमूना नीचे एक उदाहरण है। वे एक अच्छी चीज या क्रच हो सकते हैं। उनका दुरुपयोग मत करो। :) – Void