मैं कक्षा में चालक कन्स्ट्रक्टर को अक्षम करना चाहता हूं। आगे बढ़ने के बजाय, मैं कॉपी कन्स्ट्रक्टर पर आधार बनाना चाहता हूं। जब मैं इस कोड को लिखने की कोशिश: संकलन के दौरानचालक को अक्षम करना
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
Boo(Boo&& boo) = delete;
};
Boo TakeBoo()
{
Boo b;
return b;
}
मैं त्रुटि प्राप्त:
error C2280: 'Boo::Boo(Boo &&)': attempting to reference a deleted function
मैं कैसे बजाय चाल निर्माता और बल प्रतियां निष्क्रिय कर सकते हैं?
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
};
चाल निर्माता स्वचालित रूप से जब तक उपयोगकर्ता परिभाषित प्रतिलिपि निर्माता तो प्रतिलिपि निर्माता कहा जाता है मौजूद है के रूप में उत्पन्न नहीं कर रहा है:
सिर्फ इस कदम निर्माता ओवरलोड नहीं है और संकलक इसके लिए एक कदम निर्माता उत्पन्न नहीं करेगा क्योंकि वहाँ पहले से ही एक प्रति निर्माता –
मानक से है: "अगर एक दसवीं कक्षा की परिभाषा को स्पष्ट रूप से घोषणा नहीं करता है एक चालक कन्स्ट्रक्टर, एक को निश्चित रूप से डिफॉल्ट के रूप में घोषित किया जाएगा यदि केवल एक्स में उपयोगकर्ता द्वारा घोषित प्रतिलिपि निर्माता नहीं है [...] जब चालक कन्स्ट्रक्टर को पूरी तरह से घोषित या स्पष्ट रूप से आपूर्ति नहीं की जाती है, तो अभिव्यक्तियां जो अन्यथा इस कदम को बुलाती हैं कन्स्ट्रक्टर इसके बजाय एक कॉपी कन्स्ट्रक्टर का आह्वान कर सकता है। " – Pixelchemist
आप इससे क्या हासिल करने की उम्मीद करते हैं? यह किसी भी तरह से सार्थक प्रतीत नहीं होता है। –