Monday 15 April 2013

c++ - Order of the destructor calls at the end of block\program -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 4 जवाब

    तो के अंत में ब्लॉक \ प्रोग्राम को परिभाषित किए गए ऑब्जेक्ट के लिए डिस्ट्रिक्टर्स पर ही कंपाइलर कॉल किया गया है। क्या कोई विशेष क्रम जिसमें नाशकों को बुलाया जाता है?

      वर्ग Foo1 {सार्वजनिक: ~ Foo1 () {cout & lt; & lt; "फू 1 डीटीओआर" & lt; & lt; एंडल;}}; कक्षा Foo2 {सार्वजनिक: ~ Foo2 () {cout & lt; & lt; "फू 2 डीटीओआर" & lt; & lt; एंडल;}}; शून्य मुख्य () {Foo1 ए; फू 2 बी; }   

    इस प्रोग्राम को चलाने के लिए मुझे आउटपुट था:

    Foo2 DTOR

    Foo1 डीटीओआर

    क्या यह हमेशा अंतिम परिभाषित ऑब्जेक्ट से शुरू होता है और पहले एक के साथ समाप्त होता है? या इस व्यवहार को भविष्यवाणी नहीं किया जा सकता है और मेरा उत्पादन इस स्थिति के लिए कुछ खास है?

    ऑब्जेक्ट के लिए LIFO आदेश जीवन काल ही एकमात्र चीज़ है जो समझ में आता है इस मामूली प्रतिनिधि के उदाहरण पर गौर करें:

      struct मानहॉलर {int value; मानहाल्डर (): मान (0) {} ~ मानहॉल्डर () {std :: cout & lt; & lt; "मान =" & lt; & lt; मूल्य & lt; & lt; "\ N"; }}; संरक्षक होल्डरगर्ड {मूल्यहॉल्डर & amp; ज; होल्डरगार्ड (वैल्यूहोल्डर एंड वीएच): वीएचएच (एच) {} ~ होल्डरगार्ड () {++ h.value; }};   

    उपयोग:

      int main () {ValueHolder h; HolderGuard (ज); }   

    यह पहले आयोजित मूल्य बढ़ाता है, और उसके बाद इसे प्रिंट करेगा। बाद के चीजों को पहले नष्ट नहीं किए जाने पर चीजों को पहले चीजों पर निर्भर करना असंभव होगा।

    (उदाहरण के निर्माण का सौंदर्य यह है कि यह सही काम करता है, जब भी बाद में कोड अपवाद छेड़ता है ।)

No comments:

Post a Comment