अपवादों से निपटने के "मूल" पर यह है कि लगभग सभी चीजों को विनाशकों के माध्यम से साफ किया जाना चाहिए। उदाहरण के लिए, यदि आप एक वस्तु "नया" करते हैं तो आपको "कच्चा" सूचक मिलता है; अगर कहीं अपवाद फेंक दिया जाता है तो आपको यह सुनिश्चित करना होगा कि यह कच्चा सूचक ठीक से "हटाएं" डी है - लेकिन सुनिश्चित करें कि आप कच्चे सूचक को हटा नहीं सकते हैं जिसे प्रारंभ नहीं किया गया है।
दूसरी तरफ, यदि आप उस पॉइंटर को std :: unique_ptr में संग्रहीत करते हैं तो आपको कुछ भी करने की ज़रूरत नहीं है; जब unique_ptr नष्ट हो जाता है तो ऑब्जेक्ट हटा दिया जाता है, और ऑब्जेक्ट-विनाश स्वचालित रूप से होता है: जब unique_ptr गुंजाइश से बाहर हो जाता है, तो संकलक क्लीनअप को आविष्कार करता है, पूरी तरह से अदृश्य (इसलिए क्लीनअप कॉल के साथ कोड-क्लटरिंग नहीं) और स्वचालित रूप से (इसलिए और नहीं 'आउच, जब यह उस दुर्लभ पथ को लेता है जिसे किसी ने वास्तव में परीक्षण नहीं किया है तो इसे साफ करना भूल जाता है')।
वही लगभग हर संसाधन पर लागू किया जा सकता है; COM-ऑब्जेक्ट्स (उदाहरण के लिए, डायरेक्टएक्स में उपयोग किए जाने के लिए) के लिए "ऑटो पॉइंटर्स" हैं, अधिकांश ढांचे आपको म्यूटेक्स के चारों ओर लपेटने के लिए "स्कोप्ड लॉक" -टाइप ऑब्जेक्ट देना चाहिए (इसलिए ऑब्जेक्ट बनने पर यह म्यूटेक्स को लॉक करता है, और जब इसे नष्ट किया जाता है तो इसे अनलॉक करता है), और आप विभिन्न विंडोज-हैंडल से निपटने के लिए छोटे रैपर लिख सकते हैं।
असल में, यदि आप अपने सभी सफाई को विनाशकों में डाल देते हैं, तो आपको साफ करने के लिए "कोशिश करें ... पकड़ो ... फिर से प्रयास करें"। और "बड़ी" वस्तुओं के विनाशक अक्सर बहुत ही सरल होंगे, क्योंकि लगभग सभी "निहित" वस्तुओं को उनके विनाशकों द्वारा स्वचालित रूप से साफ किया जाता है।
स्रोत
2012-10-04 10:57:59
लिंक के बारे में, अल्स आपको यहां देता है http://stackoverflow.com/questions/12723492/how-to-clean-initialized-resources-if-exception-thown-from-constructor-in-c? क्या यह सदस्य सदस्य वस्तुएं हैं? – ForEveR
आपको किस हैंडलिंग की आवश्यकता है? आम तौर पर, आप बस अपवाद को प्रचारित करने देंगे, ताकि पहली 5 वस्तुओं को साफ तरीके से नष्ट कर दिया जा सके। कुछ और संदर्भ उपयोगी होंगे – jalf
RAII। (Http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) – ScaryAardvark