में प्रतिलिपि वर्ग को अक्षम करने का सबसे संक्षिप्त तरीका मुझे उपयोगकर्ता द्वारा परिभाषित विनाशक होने पर कॉपी कन्स्ट्रक्टर की प्रतिलिपि बनाने और कॉपी असाइनमेंट ऑपरेटर के बाद से बहिष्कृत करने में समस्या है।सी ++ 11
अधिकांश पर्याप्त सरल वर्गों के लिए डिफॉल्ट-जेनरेट किए गए कन्स्ट्रक्टर, ऑपरेटर और विनाशक ठीक हैं।
तुच्छ नाशक आधार वर्ग में आभासी बनाना: निम्न कारणों नाशक घोषित करने के बारे में विचार करें
// header class Base1 { public: virtual ~Base1() = default; }; class Base2 { public: virtual ~Base2(); }; // source Base2::~Base2() = default;
सभी 4 कॉपी और ले जाने के चाहेंगे विशेष तरीकों इन मामलों में संकलक द्वारा उत्पन्न किया जा? यदि हां, तो मुझे लगता है कि यह ठीक है और
Base1
याBase2
को जटिल करने की कोई आवश्यकता नहीं है। नाशक मेंमुद्रण डिबग संदेश:
// header class D { public: ~D(); }; // source D::~D() { #ifdef DEBUG_THIS std::cout << "D was destructed." << std::endl; #endif }
मुझे विश्वास है कि इस मामले में प्रतिलिपि निर्माता और असाइनमेंट ऑपरेटर उत्पन्न किया जा सकता है; लेकिन कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर को स्थानांतरित नहीं करेगा। मैं
D
की प्रतिलिपि बनाई गई डिफ़ॉल्ट प्रति उत्पन्न करने और अक्षम करने का उपयोग करना टालना चाहता हूं। मैंD
बाढ़ को 4deleted
घोषणाओं से बाढ़ से बचना चाहता हूं। केवल एक कॉपी कन्स्ट्रक्टर को अक्षम कर रहा है? क्या यह एक अच्छी शैली है?class X { X(X const &) = delete; void operator=(X const &x) = delete; };
मैं का पालन नहीं करते कि तुम क्या सवाल में आभासी विनाशकर्ता के साथ के बारे में बात कर रहे हैं:
मुझे बहिष्करण के बारे में आपकी बात नहीं मिलती है। क्या आप स्पष्टीकरण दे सकते हैं? – stefan
मानक-सी ++ में - भूमि आप केवल एक गैर-प्रतिलिपि योग्य वर्ग, जैसे 'बूस्ट :: noncopyable' से प्राप्त कर सकते हैं। विज़ुअल सी ++ के साथ आप एक मैक्रो पर विचार कर सकते हैं जो सिललीवर्निंग से बचने के लिए निजी घोषणाएं जोड़ता है। –
@stefan, * अंतर्निहित परिभाषित प्रतिलिपि निर्माता की पीढ़ी को बहिष्कृत किया गया है यदि टी में उपयोगकर्ता द्वारा परिभाषित विनाशक या उपयोगकर्ता परिभाषित प्रति असाइनमेंट ऑपरेटर है। * C++ 11 के बाद से (http://en.cppreference.com/ देखें डब्ल्यू/सीपीपी/भाषा/copy_constructor # उलझाव-defined_copy_constructor)। – vedg