2012-09-27 13 views
5

और इसी तरह, क्या डिफ़ॉल्ट प्रतिलिपि निर्माता सभी सदस्यों पर कॉपी कन्स्ट्रक्टर को कॉल करता है? उदाहरण के लिए, एक वर्ग तो जैसे एक गैर पॉड सदस्य है यदि:क्या डिफ़ॉल्ट असाइनमेंट ऑपरेटर सभी सदस्यों पर ऑपरेटर = कॉल करता है?

class A 
{ 
    std::string str; 
}; 

... होगा डिफ़ॉल्ट संकलक उत्पन्न प्रतिलिपि निर्माता और असाइनमेंट ऑपरेटर काम सही ढंग से? क्या वे स्ट्रिंग की कॉपी कन्स्ट्रक्टर और operator= पर कॉल करेंगे या क्या वे सदस्य चर str की बिटवाई कॉपी कॉपी करेंगे?

दूसरे शब्दों में, std::string सदस्य का मतलब है कि इस वर्ग को उपयोगकर्ता द्वारा लागू प्रतिलिपि निर्माता और असाइनमेंट ऑपरेटर की आवश्यकता है?

उत्तर

5

हां, कंपाइलर से उत्पन्न एक सही ढंग से काम करेगा।

हालांकि, अगर आप अपना खुद का कार्यान्वयन करते हैं और उन्हें खाली छोड़ देते हैं, तो यह नहीं होगा।

यदि आप स्मृति का प्रबंधन नहीं कर रहे हैं और आपके सभी सदस्य सही प्रतिलिपि/असाइनमेंट/विनाश प्रदान करते हैं, तो आपको अपनी प्रतिलिपि कन्स्ट्रक्टर/विनाशक/असाइनमेंट ऑपरेटर को लागू करने की आवश्यकता नहीं है (और नहीं)।

दूसरे शब्दों में, क्या std :: स्ट्रिंग सदस्य का मतलब है कि इस वर्ग को उपयोगकर्ता द्वारा लागू प्रतिलिपि बनाने वाले और असाइनमेंट ऑपरेटर की आवश्यकता है?

नहीं, संकलक-जेनरेट किए गए लोग पूरी तरह से काम करेंगे।

+0

"हां, कंपाइलर से उत्पन्न एक सही ढंग से काम करेगा।" - यहां तक ​​कि कॉन्स सदस्यों के साथ कक्षाओं के लिए भी? –

+0

@spin_eight अच्छी तरह से एक प्रति या असाइनमेंट भी संकलित नहीं होगा। –

+3

@ लचियनग्रिगोर: दरअसल, एक प्रति संकलित होगी। असाइनमेंट स्पष्ट रूप से नहीं होगा। –

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