सी ++ 11 में स्पष्ट रूप से हटाए गए सदस्य फ़ंक्शंस के साथ, क्या यह अभी भी एक गैर-लोकप्रिय बेस क्लास से प्राप्त करने के लिए उपयुक्त है?सी ++ 11 में स्पष्ट रूप से हटाए गए सदस्य फ़ंक्शंस के साथ, क्या यह अभी भी एक गैर-लोकप्रिय बेस क्लास से प्राप्त करने के लिए उपयुक्त है?
मैं उस चाल के बारे में बात कर रहा हूं जहां आप निजी रूप से बेस क्लास का उत्तराधिकारी हैं, जिसमें निजी या हटाए गए प्रतिलिपि निर्माता और कॉपी असाइनमेंट (उदा। boost::noncopyable
) है।
क्या इस question में अभी भी फायदे हैं जो सी ++ 11 पर लागू होते हैं?
मुझे नहीं लगता कि कुछ लोग दावा करते हैं कि कक्षा + + में गैर-प्रतिलिपि बनाने योग्य वर्ग बनाना आसान है।
सी ++ 03 में:
private:
MyClass(const MyClass&) {}
MyClass& operator=(const MyClass&) {}
सी ++ 11 में:
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
संपादित करें:
के रूप में कई लोगों ने बताया है, यह गया था निजी प्रतिलिपि कन्स्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटर के लिए खाली निकायों (यानी {}) प्रदान करने की गलती हो कारण यह है कि वर्ग स्वयं को उन ऑपरेटरों को बिना किसी त्रुटि के बुलाएगा। मैंने पहली बार {} जोड़ने को शुरू नहीं किया, लेकिन कुछ लिंकर मुद्दों में भाग गया जिसने मुझे कुछ मूर्ख कारणों से {} जोड़ दिया (मैं परिस्थितियों को पुनर्जीवित नहीं करता)। मुझे बेहतर पता है। :-)
आप एक मुहावरे का वर्णन नहीं कर रहे हैं, लेकिन इसके केवल एक कार्यान्वयन। मुहावरे बनी हुई है, और अब लिखना आसान है। –
एक खाली निजी प्रतिलिपि निर्माता और निजी प्रति असाइनमेंट ऑपरेटर लिखने से यह कैसे आसान है? –
'idiom' शब्द का दुरुपयोग से बचने के लिए संपादित किया गया। –