यदि मैं operator=
ओवरराइड करता हूं तो कॉपी कन्स्ट्रक्टर स्वचालित रूप से नए ऑपरेटर का उपयोग करेगा? इसी प्रकार, अगर मैं एक प्रतिलिपि निर्माता को परिभाषित करता हूं, तो operator=
प्रतिलिपि प्रतिलिपि से व्यवहार को 'वारिस' कर देगा?कॉपी कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर
उत्तर
नहीं, वे अलग-अलग ऑपरेटर हैं।
कॉपी कन्स्ट्रक्टर एक नई वस्तु बनाने के लिए है। यह किसी मौजूदा ऑब्जेक्ट को एक नव निर्मित ऑब्जेक्ट पर प्रतिलिपि बनाता है। कॉपी कन्स्ट्रक्टर का उपयोग पुराने इंस्टेंस से एक नया उदाहरण प्रारंभ करने के लिए किया जाता है। इसे या कार्यों के बाहर मूल्यों के मूल्य के रूप में चर द्वारा चर को पारित करते समय जरूरी नहीं कहा जाता है।
असाइनमेंट ऑपरेटर पहले से मौजूद किसी ऑब्जेक्ट से निपटने के लिए है। असाइनमेंट ऑपरेटर का उपयोग मौजूदा उदाहरण को को रावल्यू के समान मानों को बदलने के लिए किया जाता है, जिसका अर्थ यह है कि उदाहरण होना चाहिए और आंतरिक गतिशील स्मृति होने पर पुन: प्रारंभ किया जाना चाहिए।
उपयोगी लिंक:
'... को फ़ंक्शन में मान द्वारा वैरिएबल पास करने या कार्यों के बाहर वापसी मूल्यों के रूप में गुजरते समय कहा जाता है। 'जरूरी नहीं। जब आप आरवीओ के मूल्य धन्यवाद द्वारा वापस आते हैं तो एक प्रतिलिपि बनाने वाले को बुलाया नहीं जा सकता है। –
@PS: +1 ... धन्यवाद! संपादित! –
@ प्र्रासून, मैं समझ में नहीं आता, जब कार्यों में मूल्य से वैरिएबल पास करना या कार्यों के बाहर मूल्यों के रूप में, प्रतिलिपि बनाने वाले को क्यों नहीं कहा जा सकता है? और आरवीओ क्या है? – Alcott
नहीं। जब तक आप एक प्रतिलिपि ctor परिभाषित नहीं करते हैं, तो एक डिफ़ॉल्ट उत्पन्न होगा (यदि आवश्यक हो)। जब तक आप ऑपरेटर को परिभाषित नहीं करते हैं, एक डिफ़ॉल्ट उत्पन्न होगा (यदि आवश्यक हो)। वे एक-दूसरे का उपयोग नहीं करते हैं, और आप उन्हें स्वतंत्र रूप से बदल सकते हैं।
नहीं, वे एक ही ऑपरेटर नहीं हैं।
सं
और निश्चित रूप से (जब खाते में rvalues लेने या rule of five) the rule of three पर एक नजर है
नहीं। वे अलग-अलग वस्तुएं हैं।
आपकी चिंता प्रतिलिपि निर्माता और असाइनमेंट ऑपरेटर के बीच कोड दोहराव है, तो निम्न मुहावरा, copy and swap नामित पर विचार करें:
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
के साथ आदान-प्रदान करें और फ़ंक्शन से बाहर निकलें (पुराने this
के अंदर)।
के लिए समान होता है, क्या आप यह कहते हैं कि ऑपरेटर को कॉल करने के लिए यह एक अच्छा अभ्यास नहीं है = प्रतिलिपि या उपाध्यक्ष में विपरीत? – Alcott
@ एल्कॉट: आप कॉपी कन्स्ट्रक्टर में ऑपरेटर = को कॉल नहीं करते हैं, जैसा कि मैं दिखाता हूं, आप इसे दूसरी तरफ करते हैं। –
आपका असाइनमेंट ऑपरेटर क्यों कॉन्स्ट संदर्भ नहीं ले रहा है? –
- 1. सी ++: कॉपी कन्स्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटर को कार्यान्वित करना
- 2. असाइनमेंट ऑपरेटर कॉल कन्स्ट्रक्टर क्यों करता है?
- 3. कोबजेक्ट की कॉपी कन्स्ट्रक्टर और असाइनमेंट को अक्षम क्यों करें
- 4. कन्स्ट्रक्टर, विनाशक और असाइनमेंट ऑपरेटर कॉपी करें। जब हमें उन सभी की आवश्यकता नहीं होती है?
- 5. कॉपी कन्स्ट्रक्टर और डिफॉल्ट कन्स्ट्रक्टर
- 6. क्यों कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर की प्रतिलिपि की अनुमति है?
- 7. जब मूव कन्स्ट्रक्टर/असाइनमेंट
- 8. एक वर्ग के लिए कॉपी कन्स्ट्रक्टर/असाइनमेंट ऑपरेटर के साथ त्रुटि जिसमें std :: atomic सदस्य चर
- 9. क्या कॉपी कन्स्ट्रक्टर से डिफ़ॉल्ट असाइनमेंट ऑपरेटर को कॉल करने के लिए यह खराब फॉर्म है?
- 10. सी ++ ओवरलोडिंग असाइनमेंट ऑपरेटर
- 11. कन्स्ट्रक्टर या कॉपी कन्स्ट्रक्टर?
- 12. असाइनमेंट ऑपरेटर C++
- 13. सी ++ कॉपी और असाइनमेंट के साथ क्यूटी प्रतिबिंब
- 14. सी # कॉपी कन्स्ट्रक्टर जनरेटर
- 15. कॉपी कन्स्ट्रक्टर
- 16. कॉपी कन्स्ट्रक्टर
- 17. जावा कॉपी कन्स्ट्रक्टर और विरासत
- 18. मेरी सी ++ कक्षा के लिए मुझे किन परिस्थितियों में, असाइनमेंट ऑपरेटर, कॉपी कन्स्ट्रक्टर और विनाशक प्रदान करना चाहिए?
- 19. सी ++ में बेस क्लास के कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर का उपयोग कैसे करें?
- 20. समानांतर असाइनमेंट ऑपरेटर रूबी
- 21. असाइनमेंट ऑपरेटर '=' परमाणु है?
- 22. अजगर असाइनमेंट ऑपरेटर संबद्धता
- 23. जावास्क्रिप्ट स्ट्रिंग असाइनमेंट ऑपरेटर
- 24. निर्माता या असाइनमेंट ऑपरेटर
- 25. PHP में संदर्भ असाइनमेंट ऑपरेटर, = और
- 26. त्रिगुट सशर्त और असाइनमेंट ऑपरेटर पूर्वता
- 27. क्या डिफ़ॉल्ट असाइनमेंट ऑपरेटर सभी सदस्यों पर ऑपरेटर = कॉल करता है?
- 28. सी # जेनेरिक कॉपी कन्स्ट्रक्टर
- 29. मैटलैब कॉपी कन्स्ट्रक्टर
- 30. टेम्पलेट क्लास कॉपी कन्स्ट्रक्टर
इस लिंक को देखें: http://stackoverflow.com/questions/1457842/is-this-good-code-copy-ctor-operator & http://stackoverflow.com/questions/1477145/reducing-code - डुप्लिकेशंस-बीच-ऑपरेटर-एंड-द-कॉपी-कन्स्ट्रक्टर –
संभावित डुप्लिकेट [तीन का नियम क्या है?] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of- तीन) – fredoverflow