डिजाइन-वार, जितना संभव हो सके स्वचालित (ढेर) आवंटन का उपयोग करें। जब भी आपको किसी वस्तु के जीवनकाल को एक निश्चित दायरे से आगे बढ़ाने की आवश्यकता होती है, तो गतिशील रूप से इसे आवंटित करें।
और फिर भी, कभी भी गतिशील रूप से चीजें आवंटित नहीं करते कच्चे। हमेशा उन्हें किसी प्रकार के रैपर में लपेटें जो स्कोप-बाउंड रिसोर्स मैनेजमेंट (एसबीआरएम, जिसे पहले गूंगा/अजीब नाम संसाधन-अधिग्रहण प्रारंभिक या आरएआईआई के तहत जाना जाता है) लागू करता है। यानी गतिशील आवंटन स्वचालित वस्तुओं में रखा जाना चाहिए जो साफ हो जाएंगे स्वचालित रूप से ऊपर!
इसका एक अच्छा उदाहरण std::vector
है: आप मेमोरी आंतरिक को vector
पर रिसाव नहीं कर सकते हैं, क्योंकि यह हर परिदृश्य में विनाशक चलाया जाता है जब स्मृति को मुक्त किया जाना चाहिए, और यह आपके लिए इसे मुक्त कर देगा। auto_ptr
मानक पुस्तकालय में उपलब्ध पहला और एकमात्र स्मार्ट सूचक है, लेकिन यह बहुत खराब है। बेहतर है shared_ptr
, या बूस्ट और/या टीआर 1 और/या सी ++ 0x में उपलब्ध कई अन्य लोकप्रिय स्मार्ट पॉइंटर्स का उपयोग करना बेहतर है।
अभिनय की दृष्टि से, ढेर पर आवंटित वस्तुओं तो किया जा सकता है बहुत जल्दी से (ढेर आकार बढ़ जाती है प्रति-समारोह-कॉल, इसलिए सभी आवश्यक स्मृति सामने एक का एक सरल कदम द्वारा आबंटित की गई है सूचक।) आमतौर पर, गतिशील आवंटन को आम तौर पर अधिक समय की आवश्यकता होती है। कस्टम आवंटन योजनाओं के साथ तेजी से गतिशील आवंटन प्राप्त करना काफी संभव है, लेकिन यहां तक कि सबसे अच्छा अभी भी ढेर आवंटन से धीमा होगा।
कभी-कभी, आप पाते हैं कि आप वस्तुओं को प्रतिलिपि बनाने में बहुत अधिक समय व्यतीत करते हैं। इस मामले में, यह गतिशील रूप से आवंटित करने के लिए इसके लायक हो सकता है और केवल पॉइंटर्स को स्थानांतरित कर सकता है। हालांकि, कृपया ध्यान दें मैंने कहा "ढूंढें"। इस प्रकार का परिवर्तन कुछ ऐसा है जो आपको प्रोफाइलिंग और मापने से मिलता है, कभी अनुमान लगाता नहीं है।
तो: जब आवश्यक हो तो स्वचालित आवंटन, आवश्यक होने पर गतिशील आवंटन।
हां। मेरी सलाह है कि इस पुस्तक को पढ़ना है: http://www2.research.att.com/~bs/3rd.html विशेष रूप से अध्याय 5: पॉइंटर्स, Arrays, और संरचनाएं –
क्या आप पहली जगह समझते हैं कि आपको क्यों आवश्यकता हो सकती है वस्तुओं को गतिशील रूप से बनाने के लिए? –