रचनाकार और विनाशक विशेष सदस्य कार्य हैं। आम तौर पर आप हर जगह पढ़ लेंगे कि निर्माण कम से कम व्युत्पन्न प्रकार से पदानुक्रम में सबसे अधिक व्युत्पन्न प्रकार तक शुरू होता है। यह वास्तव में वह क्रम है जिसमें रचनाकार निष्पादन पूरा होता है, लेकिन यह नहीं कि निर्माण कैसे शुरू किया जाता है।
कंस्ट्रक्टर्स प्रारंभ सूची निष्पादन आदेश गारंटी देता है कि जबकि अधिकांश ली गई वस्तु के निर्माता पहले निर्माता को क्रियान्वित जब आप एक वस्तु सबसे व्युत्पन्न निर्माता से मेल खाता है का दृष्टांत यह
पूरा करने के लिए पिछले निर्माता हो जाएगा शुरू करने के लिए किया जाएगा निर्माण कॉल पहले कहा जाता है। मिलान किए गए अधिकांश व्युत्पन्न कन्स्ट्रक्टर की प्रारंभिक सूची प्रारंभ होती है, और प्रारंभिक सूचियों में एक निश्चित क्रम होता है: पहले आधार वर्गों के निर्माणकर्ताओं को विरासत सूची में क्रम या उपस्थिति कहा जाता है। फिर सदस्य विशेषता रचनाकारों को उस क्रम में बुलाया जाता है जिसमें वे कक्षा घोषणा में दिखाई देते हैं (वह क्रम नहीं जिसमें वे प्रारंभिक सूची में दिखाई देते हैं)। पूरी प्रारंभिक सूची (प्रत्येक स्तर पर) पूर्ण होने के बाद, कन्स्ट्रक्टर बॉडी ब्लॉक निष्पादित किया जाता है, जिसके बाद कन्स्ट्रक्टर कॉल पूर्ण हो जाता है।
सबसे अधिक व्युत्पन्न विनाशक निष्पादन पूरा करने के बाद सभी आधार विनाशकों को निर्माण के विपरीत क्रम में बुलाया जाएगा। निर्माण के सटीक रिवर्स ऑर्डर में विनाश होता है।
विनाशक एक अलग तरीके से विशेष हैं: वे अतिरंजित नहीं हो सकते हैं। जब आप किसी वर्ग के सबसे व्युत्पन्न विनाशक को कॉल करते हैं, तो यह विनाशक निकाय के निष्पादन को पूरा करेगा, जिसके बाद सभी सदस्य विशेषता विनाशकों को सृजन के विपरीत क्रम में बुलाया जाएगा। सबसे व्युत्पन्न विनाशक पूरा होने के बाद और सबसे व्युत्पन्न वस्तु के सदस्य विनाशकों को पूरा करने के बाद, इसके सबसे प्रत्यक्ष आधारों का विनाश निर्माण के विपरीत क्रम में शुरू होता है, विनाशकारी निकाय निष्पादित करेंगे, फिर सदस्य विनाशकों को विशेषता देता है और इसी तरह .. अंत में सभी निर्मित तत्व नष्ट हो जाएंगे। बहुरूपी कक्षाओं के लिए
Destructors आभासी
विनाश वर्णन ऊपर सबसे व्युत्पन्न नाशक करने के लिए कॉल के साथ शुरू होता होना चाहिए।या वस्तु delete
एक आधार वर्ग जिसका नाशक आभासी है के माध्यम से घ है जब यह सबसे व्युत्पन्न प्रकार, के लिए सूचक पर delete
फोन करके प्राप्त किया जा सकता है जब एक ऑटो वस्तु क्षेत्र से बाहर चला जाता है।
आप आधार वर्ग में नाशक कीवर्ड जोड़ने के लिए भूल जाते हैं और आप आधार आप सीधे आधार नाशक कॉल करेंगे करने के लिए एक सूचक के माध्यम से एक व्युत्पन्न वस्तु को हटाने का प्रयास है, और उस का तात्पर्य हैं कि में सूचक प्रकार से नीचे के सभी उप वस्तुओं पदानुक्रम ठीक से नष्ट नहीं किया जाएगा। सभी विरासत पदानुक्रम जिसमें आप पॉइंटर्स के माध्यम से ऑब्जेक्ट को मूल प्रकार पर हटा देंगे में आभासी विनाशक होना चाहिए। अंगूठे के सामान्य नियम के रूप में, यदि आपके पास पहले से कोई वर्चुअल विधि है, तो विनाशक वर्चुअल बनाने की लागत नगण्य है और यह एक सुरक्षित नेट है। कई कोडिंग मार्गदर्शिकाएं लागू करती हैं कि विरासत पदानुक्रमों में विनाशक आभासी होना चाहिए। कुछ लोग सभी विनाशकों को आभासी होने का अनुरोध करते हैं, लेकिन सभी वस्तुओं के लिए एक vtable जोड़ने और सभी वस्तुओं के लिए एक vtable सूचक जोड़ने की लागत पर संभावित संसाधन रिसाव से बचने का इरादा है।
स्रोत
2009-10-28 22:55:24
दो सबसे अच्छा सरल सी ++ प्रश्नों के उत्तर प्राप्त करने के तरीके: 1) एक साधारण परीक्षण का मामला (लिखने निर्माणकर्ता और विनाशकर्ता में जैसे डाल COUTS), और 2) देखें कि क्या यह http पर जवाब है: // www। parashift.com/c++-faq-lite/ – Artelius
यह आम तौर पर आप जो पूछ रहे हैं उससे संबंधित प्रश्न को प्रासंगिक बनाने में मदद करता है, ताकि आप यह देखने के लिए कि आप वास्तव में क्या पूछ रहे हैं, विवरण को देखने के बजाय। –
यह कोड कई कारणों से संकलित नहीं होगा। अर्थात। एक वर्ग केले में विनाशक नहीं हो सकता "~ माइबेस()"। पोस्ट करने से पहले कृपया अपना कोड सत्यापित करें। –