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