यह शायद समझने के लिए अगर आप एक स्मृति के ब्लॉक के भीतर कई MyClass वस्तुओं का निर्माण कल्पना आसान है।
उस मामले में, यह की तरह कुछ जाना होगा:
- नए चार का उपयोग कर स्मृति का एक विशाल ब्लॉक का आवंटन [10 * sizeof (MyClass)] या malloc (10 * sizeof (MyClass))
- उस स्मृति के भीतर दस MyClass ऑब्जेक्ट्स बनाने के लिए नया प्लेसमेंट का उपयोग करें।
- कुछ करो।
- अपनी प्रत्येक ऑब्जेक्ट के विनाशक को कॉल करें
- हटाएं [] या मुक्त() का उपयोग करके स्मृति के बड़े ब्लॉक को हटा दें।
इस बात की तरह अगर आप एक संकलक, या एक ओएस, आदि
लिख इस मामले में कर रहे हैं आप कर सकते हैं, मुझे आशा है कि यह स्पष्ट है तुम क्यों अलग "नाशक" की जरूरत है और "हटाएं" चरण, क्योंकि कॉल डिलीट करने का कोई कारण नहीं है।हालांकि, आप मेमोरी को डिलीकेट करते हैं, हालांकि आप इसे सामान्य रूप से करेंगे (मुफ़्त, हटाएं, एक विशाल स्थैतिक सरणी के लिए कुछ भी नहीं करें, अगर सरणी किसी अन्य ऑब्जेक्ट का हिस्सा है, आदि), और यदि आप नहीं करते हैं यह लीक हो जाएगा।
यह भी ध्यान दें कि ग्रेग ने कहा है कि, इस मामले में, आप डिलीट का उपयोग नहीं कर सकते हैं, क्योंकि आपने सरणी को नए [] के साथ आवंटित किया है, इसलिए आपको हटाएं [] का उपयोग करना होगा।
यह भी ध्यान रखें कि आपको यह मानना होगा कि आपने MyClass के लिए डिलीट नहीं किया है, अन्यथा यह पूरी तरह से कुछ अलग करेगा जो लगभग "नया" के साथ असंगत है।
तो मुझे लगता है कि आप वर्णन करते हुए "हटाएं" को कॉल करना चाहते हैं, लेकिन क्या यह कभी काम कर सकता है? मुझे लगता है कि यह मूल रूप से एक ही सवाल है "मेरे पास दो असंबंधित प्रकार हैं जिनके पास विनाशक नहीं हैं। क्या मैं एक प्रकार के सूचक को नया कर सकता हूं, फिर उस स्मृति को किसी अन्य प्रकार के सूचक से हटा दें?" दूसरे शब्दों में, "क्या मेरे कंपाइलर में सभी आवंटित सामानों की एक बड़ी सूची है, या यह विभिन्न प्रकार के लिए अलग-अलग चीजें कर सकती है"।
मुझे डर है कि मुझे यकीन नहीं है। कल्पना पढ़ना यह कहते हैं:
5.3.5 ... यदि [नष्ट ऑपरेटर की] संकार्य के स्थिर प्रकार की गतिशील प्रकार से अलग है, स्थिर प्रकार संकार्य के एक आधार वर्ग होगा गतिशील प्रकार और स्थिर प्रकार में वर्चुअल विनाशक होगा या व्यवहार अपरिभाषित है।
मुझे लगता है कि इसका मतलब है कि "यदि आप दो असंबंधित प्रकार उपयोग करते हैं, यह काम नहीं करता है (यह एक आभासी नाशक के माध्यम से polymorphically एक वर्ग वस्तु को हटाने के लिए ठीक है)।"
तो नहीं, ऐसा मत करो। मुझे संदेह है कि यह अक्सर अभ्यास में काम कर सकता है, अगर संकलक पूरी तरह से पते पर दिखता है और प्रकार नहीं (और न तो प्रकार एक बहु-विरासत वर्ग है, जो पते को उलझाएगा), लेकिन कोशिश न करें।
+1 अच्छा सवाल है, मुझे यह भी समझना अच्छा लगेगा। – AraK
खैर, तकनीकी रूप से, नियुक्ति 'नया' स्मृति आवंटित नहीं करता है। लेकिन यह इस संदर्भ में एक विस्तार है। – Griwes
@Griwes: +1 तर्कसंगत रूप से यह एक मौलिक बिंदु है :) –