सामान्य रूप से, ढेर से आवंटित होने से बचें जब तक आपको यह करना न पड़े। यदि आपको, उन वस्तुओं के संदर्भ संदर्भ का उपयोग करना है जो लंबे समय तक रहते हैं और आपके कोड के विभिन्न हिस्सों के बीच साझा करने की आवश्यकता है।
कभी-कभी आप वस्तुओं गतिशील आवंटित करने के लिए की जरूरत है, लेकिन वे केवल समय की एक निश्चित अवधि के भीतर इस्तेमाल किया जाएगा। उदाहरण के लिए, पिछले प्रोजेक्ट में मुझे डेटाबेस स्कीमा का जटिल इन-मेमोरी प्रस्तुति बनाने की आवश्यकता थी - मूल रूप से ऑब्जेक्ट्स का एक जटिल चक्रीय ग्राफ। हालांकि, ग्राफ को केवल डेटाबेस कनेक्शन की अवधि के लिए आवश्यक था, जिसके बाद सभी नोड्स को एक शॉट में मुक्त किया जा सकता था। इस तरह के परिदृश्य में, उपयोग करने के लिए एक अच्छा पैटर्न कुछ है जिसे मैं "स्थानीय जीसी मुहावरे" कहता हूं। मुझे यकीन नहीं है कि इसमें "आधिकारिक" नाम है, क्योंकि यह कुछ ऐसा है जो मैंने केवल अपने कोड में देखा है, और कोको में (NSAutoreleasePool को ऐप्पल के कोको संदर्भ में देखें)।
संक्षेप में, आप एक "कलेक्टर" ऑब्जेक्ट बनाते हैं जो पॉइंटर्स को अस्थायी ऑब्जेक्ट्स में रखता है जिसे आप नए का उपयोग करके आवंटित करते हैं। यह आमतौर पर आपके कार्यक्रम में कुछ गुंजाइश से बंधे होते हैं, या तो एक स्थिर दायरा (उदाहरण के लिए - एक स्टैक-आवंटित वस्तु जो आरएआईआई मुहावरे को लागू करता है) या गतिशील एक (उदाहरण के लिए - डेटाबेस कनेक्शन के जीवनकाल से जुड़ा हुआ है, जैसा कि मेरी पिछली परियोजना)। जब "कलेक्टर" ऑब्जेक्ट मुक्त हो जाता है, तो इसका विनाशक उन सभी वस्तुओं को मुक्त करता है जो यह इंगित करता है।
इसके अलावा, डॉ। पिज्जा की तरह मुझे लगता है कि टेम्पलेट का उपयोग न करने का प्रतिबंध बहुत कठोर है। हालांकि, सोलारिस, एईक्स, और एचपी-यूएक्स के प्राचीन संस्करणों पर बहुत अधिक विकास करने के बाद (हाल ही में - हाँ, ये प्लेटफॉर्म अभी भी फॉर्च्यून 50 में जीवित हैं), मैं आपको बता सकता हूं कि यदि आप वास्तव में पोर्टेबिलिटी की परवाह करते हैं, तो आप जितना संभव हो सके टेम्पलेट का उपयोग करना चाहिए। कंटेनरों और स्मार्ट पॉइंटर्स के लिए उनका उपयोग करना ठीक होना चाहिए, हालांकि (यह मेरे लिए काम करता है)। टेम्पलेट्स के बिना मैंने जो तकनीक वर्णित की है वह लागू करने के लिए और अधिक दर्दनाक है। यह आवश्यक होगा कि "कलेक्टर" द्वारा प्रबंधित सभी ऑब्जेक्ट्स एक सामान्य बेस क्लास से प्राप्त हों।
स्रोत
2008-08-26 19:18:03
बहुत बुरा यह इतना पुराना है। मुझे इस बारे में एक स्पष्टीकरण सुनना अच्छा लगेगा कि आप (विशेष रूप से) जेनेरिक क्यों नहीं उपयोग कर सकते हैं। – jmucchiello
ढांचे के दस्तावेज़ीकरण से: टेम्पलेट का उपयोग न करें। वे विभिन्न ऑपरेटिंग सिस्टम के लिए पोर्टेबल नहीं हैं, विशेष रूप से जिस तरह से वे कंपाइलर्स और लिंक-एडिटर्स द्वारा समर्थित हैं। वर्तमान में मैं इसके बारे में कह सकता हूं –
टेम्पलेट्स को 200 9 में विभिन्न ऑपरेटिंग सिस्टम पर ठीक से समर्थन दिया गया था, जब तक कि ओएस के पास उनके लिए मुश्किल सक्षम कंपेलर उपलब्ध थे। कोई भी ढांचा लिखने वाला व्यक्ति अपने दावे के लिए कुछ वास्तविक प्रमाणों के साथ आना चाहिए था। –