में विधियों के लिए `= delete` का सही उपयोग क्या निम्न स्निपलेट सही है अन्य सभी जेनरेट किए गए तरीकों और कक्षाओं के लिए रचनाकारों को परिभाषित करने के लिए?कक्षाओं
struct Picture {
// 'explicit': no accidental cast from string to Picture
explicit Picture(const string &filename) { /* load image from file */ }
// no accidental construction, i.e. temporaries and the like
Picture() = delete;
// no copy
Picture(const Picture&) = delete;
// no assign
Picture& operator=(const Picture&) = delete;
// no move
Picture(Picture&&) = delete;
// no move-assign
Picture& operator=(Picture&&) = delete; // return type correct?
};
यह प्रत्येक डिफ़ॉल्ट कंपाइलर कार्यान्वयन को हटा देता है और केवल विनाशक को छोड़ देता है, है ना? इसके बिना कक्षा (लगभग) अनुपयोगी मुझे लगता है, लेकिन मैं इसे भी हटा सकता हूं, सही?
क्या चाल-प्रकार Picture&
चाल-असाइन operator=(Picture&&)
सही है? अगर मैं वापसी प्रकार के लिए Picture&&
लिखा तो क्या इससे कोई फर्क पड़ता है?
ऐसा लगता है जैसे सी ++ वास्तव में सी ++ 0x में बहुत कुछ बदल गया है, दिलचस्प चीजें। – briantyler
यह एक स्पष्ट वाक्यविन्यास है, फिर उन विधियों को 'निजी' अनुभाग में छिपाने का सामान्य अभ्यास, और केवल * घोषित * लेकिन * परिभाषित * नहीं। – towi