मैं अब सीटीओ सीख रहा हूं और कुछ सवाल हैं।सी ++ ऑब्जेक्ट सृजन और कन्स्ट्रक्टर
Foo obj(args);
Foo obj2;
obj = Foo(args);
Foo obj3 = Foo(args);
पहला भाग: केवल 1 निर्माता कहा जाता है (फू) और obj
आरंभ नहीं हो जाता इन लाइनों पर। तो, 1 वस्तु निर्माण।
दूसरा भाग: अस्थायी ऑब्जेक्ट obj2
का निर्माण, इसके लिए डिफ़ॉल्ट ctor को कॉल करना। अगली पंक्तियां हम Foo
की एक और प्रतिलिपि बनाते हैं और इसकी प्रतिलिपि operator=()
में पास करते हैं। क्या वह सही है? तो, 3 स्थानीय अस्थायी वस्तुओं, 2 कन्स्ट्रक्टर कॉलिंग।
तीसरा भाग: 1 वस्तु Foo
बनाने और इसे operator=()
में कॉपी है गुजरती हैं। तो, 2 temprorary वस्तुओं और 1 सीटीआर कॉलिंग।
क्या मैं यह अधिकार समझता हूं? और यदि यह सच है, तो संकलक (आखिरी जीसीसी, उदाहरण के लिए) सामान्य मामलों में इन्हें अनुकूलित करेगा?
'ऑपरेटर =() 'आमतौर पर संदर्भ द्वारा अपना तर्क प्राप्त करता है, इसलिए इसे कॉल करने में कोई प्रतियां नहीं होती हैं। – rodrigo
obj3 वास्तव में कॉपी कन्स्ट्रक्टर का उपयोग करके असाइनमेंट ऑपरेटर नहीं बनाया गया है। –