RAII आंशिक रूप से यह तय करने के बारे में है कि जब कोई वस्तु अपने स्वयं के क्लीनअप के लिए जिम्मेदार हो जाती है - नियम यह है कि वस्तु तब जिम्मेदार हो जाती है जब उसका निर्माणकर्ता प्रारंभिककरण पूरा करता है। इनिशियलाइजेशन और क्लीनअप, कंस्ट्रक्टर और डिस्ट्रक्टर की समरूपता का मतलब है कि दोनों का एक-दूसरे से घनिष्ठ संबंध है।
आरएआई का एक बिंदु अपवाद सुरक्षा सुनिश्चित करना है - कि अपवाद फेंके जाने पर एप्लिकेशन आत्मनिर्भर रहता है। पहली नजर में यह तुच्छ है - जब कोई अपवाद किसी दायरे से बाहर निकलने का कारण बनता है, तो उस दायरे के स्थानीय चरों को नष्ट करने की आवश्यकता होती है।
लेकिन क्या होता है अगर अपवाद फेंक एक निर्माता के भीतर होता है?
खैर, ऑब्जेक्ट पूरी तरह से निर्मित नहीं किया गया है, इसलिए सुरक्षित रूप से नष्ट नहीं किया जा सकता है। निर्माता को यह सुनिश्चित करने के लिए आवश्यकतानुसार ब्लॉक की कोशिश करनी चाहिए कि कोई भी आवश्यक क्लीनअप अपवाद के प्रचार से पहले किया जाए। एक बार अपवाद उस क्षेत्र के बाहर फैल जाता है जहां ऑब्जेक्ट का निर्माण किया गया था, तो कोई विध्वंसक कॉल नहीं होगा, क्योंकि ऑब्जेक्ट का निर्माण पहले स्थान पर नहीं किया गया था।
ऑब्जेक्ट के अंदर सदस्य डेटा के लिए विशेष रूप से कंस्ट्रक्टर्स को नष्ट किया जा रहा है। यदि उन में से एक अपवाद फेंकता है, तो आपका मुख्य कंस्ट्रक्टर कोड बिल्कुल नहीं चलेगा - लेकिन कुछ कोड जो उस कंस्ट्रक्टर का एक अंतर्निहित हिस्सा बनाते हैं। सफलतापूर्वक बनाए गए किसी भी सदस्य को स्वचालित रूप से नष्ट कर दिया जाएगा। कोई भी सदस्य जो निर्माण नहीं किया गया था (अपवाद को फेंकने वाले सहित) नहीं हैं।
इसलिए मूल रूप से, RAII एक ऐसी नीति है जो यह सुनिश्चित करती है कि पूरी तरह से निर्मित होने वाली कोई भी चीज समय पर नष्ट हो जाएगी, विशेष रूप से अपवाद फेंकता की उपस्थिति में, और यह कि कोई भी वस्तु या तो पूरी तरह से निर्मित हो जाती है या वह नहीं है (कोई आधा नहीं है) उन वस्तुओं का निर्माण किया जिन्हें आप नहीं जान सकते कि कैसे सुरक्षित रूप से सफाई की जाए)। जो संसाधन आवंटित किए जाते हैं, उन्हें भी मुक्त कर दिया जाता है। और बहुत सारे काम स्वचालित हैं, इसलिए प्रोग्रामर को इसके बारे में बहुत अधिक चिंता करने की ज़रूरत नहीं है।