पॉइंटर्स गतिशील स्मृति आवंटन को तुरंत चालू नहीं करते हैं। पॉइंटर्स और आवंटन पूरी तरह से अलग चीजें हैं।
यदि आप गतिशील आवंटित स्मृति को इंगित करने वाले पॉइंटर की प्रतिलिपि बनाते हैं, तो आपके पास समान आवंटित स्मृति पर इंगित करने वाले दो पॉइंटर्स हैं। चूंकि आपने इसे कॉपी किया है, यह पहले ही मेमोरी ब्लॉक को इंगित करता है। विशेष रूप से, यदि कंपाइलर से उत्पन्न प्रतिलिपि निर्माता का उपयोग करते हैं, तो नया पॉइंटर पुराने सूचक के समान सटीक चीज़ को इंगित करेगा। यदि यह ठीक है तो आपको इसके साथ कुछ भी करने की ज़रूरत नहीं है।
आपको स्मृति को मुक्त करने की समस्या है। इसे दो बार मुक्त करने से आम तौर पर ढेर भ्रष्टाचार हो सकता है, जो बुरा है। मुक्त नहीं होने से यह स्मृति रिसाव का कारण बन जाएगा, जो कुछ परिस्थितियों में स्वीकार्य हो सकता है। इसके साथ अन्य पॉइंटर के माध्यम से इसे मुक्त करना भी समस्याएं पैदा करेगा। इस कारण से, जिन लोगों के पास एक ही मेमोरी के लिए एकाधिक पॉइंटर्स होते हैं वे अक्सर बूस्ट प्रोजेक्ट पर जाते हैं और अपने साझा_प्टर टेम्पलेट का उपयोग करते हैं (जो आगामी नए मानक में होगा, और सबसे अद्यतित सिस्टम में मौजूद है)।
आप प्रत्येक सूचक स्मृति का हिस्सा अलग करने के लिए बात करने के लिए चाहते हैं, तो आपको लगता है कि सेट अप करने के लिए अपनी स्वयं की प्रतिलिपि निर्माता लेखन, और उस में एक नया हिस्सा और नकल आवश्यक डेटा आवंटन द्वारा की है। (आपको अपने स्वयं के असाइनमेंट ऑपरेटर को सटीक कारणों से और अपने स्वयं के विनाशक के लिए भी लिखना होगा ताकि आप स्मृति को मुक्त कर सकें। थंब का नियम है, जिसे तीन का नियम कहा जाता है, जो कहता है कि आपको अपनी प्रतिलिपि लिखनी है कन्स्ट्रक्टर, असाइनमेंट ऑपरेटर, या विनाशक, आपको शायद उन सभी को लिखना होगा।)
स्रोत
2011-02-17 19:01:58
पॉइंटर्स और डेटा जो वे इंगित करते हैं वे अलग हैं। मार्टिन के उत्तर को नीचे स्पष्ट करना चाहिए यदि मूलभूत बातों के लिए इसे जांच न करें: http://www.cplusplus.com/doc/tutorial/pointers/ – AJG85