ऐसा लगता है कि एक वेक्टर जांच करेगा कि क्या चालक को पुन: आवंटित करते समय तत्वों को स्थानांतरित करने या प्रतिलिपि बनाने के निर्णय लेने से पहले अस्वीकार्य के रूप में लेबल किया गया है या नहीं। डिफ़ॉल्ट चालक कन्स्ट्रक्टर को अस्वीकार्य के रूप में परिभाषित किया गया है? मैंने निम्नलिखित दस्तावेज देखा लेकिन यह इसे निर्दिष्ट नहीं किया। http://en.cppreference.com/w/cpp/language/move_constructorडिफ़ॉल्ट मूव कन्स्ट्रक्टर को अस्वीकार्य के रूप में परिभाषित किया गया है?
उलझाव-घोषित चाल निर्माता
कोई उपयोगकर्ता परिभाषित कदम कंस्ट्रक्टर्स एक वर्ग प्रकार (struct, वर्ग या संघ), के लिए प्रदान की जाती हैं और निम्न में से सभी सत्य है, तो: देखते हैं कोई उपयोगकर्ता द्वारा घोषित प्रति रचनाकार कोई उपयोगकर्ता द्वारा घोषित प्रति असाइनमेंट ऑपरेटर कोई उपयोगकर्ता द्वारा घोषित चाल असाइनमेंट ऑपरेटर नहीं हैं उपयोगकर्ता द्वारा घोषित विनाशक निहित घोषित चालक विस्तृत शर्तों के कारण हटाए गए अनुसार परिभाषित नहीं हैं अगले खंडमेंतब संकलक एक इनलाइन सार्वजनिक हस्ताक्षर टी :: टी (टी & &) के साथ एक वर्ग के सदस्य के रूप में एक चालक कन्स्ट्रक्टर घोषित करेगा) एक कक्षा में एकाधिक चालक रचनाकार हो सकते हैं, उदा। टी टी टी (कॉन्स टी & &) और टी :: टी (टी & &) दोनों। यदि कुछ उपयोगकर्ता परिभाषित चाल निर्माता मौजूद हैं, तो उपयोगकर्ता कीवर्ड डिफ़ॉल्ट के के साथ निहित रूप से घोषित चालक निर्माता की पीढ़ी को मजबूर कर सकता है।
अतिरिक्त जानकारी: और आप परीक्षण कर सकते हैं या नहीं, अपनी उम्मीदों पूरा किया गया है: 'static_assert (std :: is_nothrow_move_constructible :: मूल्य," MyType MoveConstructible noexcept होना चाहिए ");' –
तो सभी कार्यों निहित विशेष द्वारा लाया निहित विशेष सदस्य कार्यों के लिए 'अस्वीकरण' होने के लिए सदस्य कार्यों को 'अस्वीकरण' घोषित किया जाना चाहिए। मतलब है कि आपको सभी प्रासंगिक कार्यों 'नोएक्ससेप्ट' को चिह्नित करने के लिए पर्याप्त मेहनत करनी है, इसका मतलब है कि मानव त्रुटि के लिए बहुत कुछ जगह है, है ना? – mucaho
@ मुकाहो: ठीक है, अगर आपके सभी सदस्य स्वयं केवल स्पष्ट रूप से परिभाषित विशेष सदस्यों का उपयोग करते हैं, तो यह सब जटिल नहीं है। सरल नियम एकल जिम्मेदारी का नियम है, और डिफ़ॉल्ट रूप से केवल एकमात्र मानवीय त्रुटि जिसे आप देखना चाहिए, विशेष सदस्य कार्यों को स्पष्ट रूप से परिभाषित करना है।यह केवल विशेष उद्देश्य वर्गों (जैसे कि 'unique_ptr') छोड़ देता है जिसे आपको पशु चिकित्सक की आवश्यकता होती है। –