2015-01-02 7 views
7

निम्न कोड में, नाशक, दो बार कहा जाता है, जबकि निर्माता केवल एक बार कहा जाता है:विनाशक को कन्स्ट्रक्टर से अधिक क्यों कहा जाता है?

enum TFoo 
{ 
    VAL1, 
    VAL2 
}; 

class CFoo 
{ 

public: 
    TFoo mf; 

    CFoo() 
    { 
     cout<<"hi c'tor1\n"; 
     //mf = f; 
    } 
    CFoo(TFoo f) 
    { 
     cout<<"hi c'tor2\n"; 
     mf = f; 
    } 
    CFoo(TFoo &f) 
    { 
     cout<<"hi c'tor3\n"; 
     mf = f; 
    } 
    ~CFoo() 
    { 
     cout<<"bye\n"; 
    } 
}; 

int main() 
{ 
    vector<CFoo> v; 
    //v.assign(1, VAL1); 
    v.push_back(VAL1); 
} 

कोड आउटपुट:

hi c'tor2 
bye 
bye 

मैं एक ऐसी ही question, पाया जो उल्लिखित प्रति रचनाकारों, इसलिए मैंने उन्हें जोड़ा, लेकिन एक ही परिणाम के साथ। लाइन //v.assign(1, VAL1); को असम्बद्ध करने से कुछ भी नहीं बदलेगा।

+4

आपको कॉपी कन्स्ट्रक्टर 'सीएफयू (कॉन्स सीएफयू और)' याद आती है। – Jarod42

उत्तर

9

यह शुरू में, TFoo और CFoo के बीच निहित रूपांतरण ऑपरेटर का उपयोग, CFoo(TFoo f) निर्माण कर रही है, और उसके बाद का उपयोग कर कि अस्थायी वस्तु push_back करने के लिए इसे पारित करने के लिए डिफ़ॉल्ट प्रतिलिपि निर्माता का उपयोग कर कंटेनर में वस्तु का निर्माण या निर्माता को स्थानांतरित करने के आधार पर आप सी ++ 11 का उपयोग कर रहे हैं (जो कुछ भी प्रदर्शित नहीं कर रहा है)। फिर अस्थायी नष्ट हो जाता है और अंततः कंटेनर में वस्तु (कंटेनर के साथ)।

आप इसे here या here (सी ++ 11) और भी बेहतर देख सकते हैं।

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

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