c++ - कॉपी कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर




constructor operators (4)

नहीं, वे अलग ऑपरेटरों हैं।

कॉपी कन्स्ट्रक्टर एक नई वस्तु बनाने के लिए है। यह किसी मौजूदा ऑब्जेक्ट को एक नव निर्मित ऑब्जेक्ट पर प्रतिलिपि बनाता है। कॉपी कन्स्ट्रक्टर का उपयोग पुराने उदाहरण से एक नया उदाहरण आरंभ करने के लिए किया जाता है। कार्यों में मूल्य या चर के मूल्यों के रूप में वैरिएबल को पास करते समय इसे जरूरी नहीं कहा जाता है।

असाइनमेंट ऑपरेटर पहले से मौजूद किसी ऑब्जेक्ट से निपटना है। असाइनमेंट ऑपरेटर का उपयोग मौजूदा उदाहरण को रावल्यू के समान मान रखने के लिए किया जाता है, जिसका अर्थ यह है कि उदाहरण को नष्ट करना होगा और आंतरिक गतिशील स्मृति होने पर पुन: प्रारंभ किया जाना चाहिए।

उपयोगी लिंक:

अगर मैं operator= ओवरराइड करता हूं operator= क्या कॉपी कन्स्ट्रक्टर स्वचालित रूप से नए ऑपरेटर का उपयोग करेगा? इसी तरह, अगर मैं एक प्रतिलिपि निर्माता को परिभाषित करता हूं, तो operator= कॉपी कन्स्ट्रक्टर से व्यवहार को स्वचालित रूप से 'वारिस' करेगा?


नहीं, वे एक ही ऑपरेटर नहीं हैं।


नहीं। जब तक आप एक प्रतिलिपि ctor परिभाषित नहीं करते हैं, तो एक डिफ़ॉल्ट उत्पन्न होगा (यदि आवश्यक हो)। जब तक आप ऑपरेटर को परिभाषित नहीं करते हैं, एक डिफ़ॉल्ट उत्पन्न होगा (यदि आवश्यक हो)। वे एक-दूसरे का उपयोग नहीं करते हैं, और आप उन्हें स्वतंत्र रूप से बदल सकते हैं।


नहीं। वे अलग-अलग वस्तुएं हैं।

यदि आपकी चिंता कॉपी कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर के बीच कोड डुप्लिकेशन है, तो निम्नलिखित मुहावरे, नामित प्रतिलिपि और स्वैप पर विचार करें:

struct MyClass
{
    MyClass(const MyClass&); // Implement copy logic here
    void swap(MyClass&) throw(); // Implement a lightweight swap here (eg. swap pointers)

    MyClass& operator=(MyClass x)
    {
        x.swap(*this);
        return *this;
    }
};

इस तरह, operator= कॉपी ऑब्जेक्ट का उपयोग एक नई ऑब्जेक्ट बनाने के लिए करेगा, जो इसे *this साथ आदान-प्रदान करेगा और इसे बाहर निकालेगा (पुराने अंदर के साथ) फ़ंक्शन से बाहर निकलें।







assignment-operator