2012-06-26 24 views
7

यह प्रतीक एक संकलक उत्पन्न विनाशक प्रतीत होता है। इस के बीच क्या अंतर है, 'कंपाइलर उत्पन्न विनाशक' और 'स्केलर हटाने वाले विनाशक'? क्या कोई अन्य प्रकार का कंपाइलर उत्पन्न ctor/dtor है?वीसी ++ में प्रतीक "वेक्टर हटाना विनाशक" का अर्थ क्या है?

+0

तुम क्यों anwser को स्वीकार नहीं करते के रूप में बाद के रूप में स्यूडोकोड में व्यक्त किया जा सकता है? – Liviu

उत्तर

8

'scalar deleting destructor' और 'vector deleting destructor' नामक कार्य delete कथन के लिए कोड उत्पन्न करते समय वीसी कंपाइलर द्वारा बनाए गए सहायक कार्यों हैं। उन्हें कक्षा विनाशक के साथ भ्रमित न करें जो संकलक द्वारा भी उत्पन्न किया जा सकता है। पूर्व

void scalar_deleting_destructor(A* pa) 
{ 
pa->~A(); 
A::operator delete(pa); 
} 

और

void vector_deleting_destructor(A* pa, size_t count) 
{ 
for (size_t i = 0; i < count; ++i) 
pa[i].~A(); 
A::operator delete[](pa); 
} 
+1

धन्यवाद, एंड्री। मैं यहां आंतरिक डिलीवरी ऑपरेटर के बारे में थोड़ा उलझन में हूं। यह स्केलर विध्वंसक हटाने वाला संकलक उत्पन्न होता है और इसे 'हटाएं' से बुलाया जाता है, क्या यह सही है? कारणों को रिकर्सन हटाने के लिए आंतरिक कॉल लगता है? – Thomson

+3

@ थॉमसन मुझे इसे और स्पष्ट करने की कोशिश करें। 'ए हटाएं' एक * डिलीट कथन * है, यानी एक भाषा निर्माण, जिसे 'ए :: ऑपरेटर डिलीट' के साथ भ्रमित नहीं किया जाना चाहिए जो एक * डिलीट ऑपरेटर * है, एक ऐसा फ़ंक्शन जो वास्तव में स्मृति को हटा देता है। मेरे पास अभी सी ++ मानक नहीं है, मैं थोड़ी देर बाद संदर्भ प्रदान कर सकता हूं। – Andrey

संबंधित मुद्दे