मैं एक प्रतिलिपि निर्माता के बिना कक्षा के लिए एक चालक कन्स्ट्रक्टर को लागू करने की कोशिश कर रहा था। मुझे एक त्रुटि मिली कि कक्षा के एक सदस्य के लिए डिफ़ॉल्ट कन्स्ट्रक्टर गायब था।एक चालक कन्स्ट्रक्टर को अपने सदस्यों के लिए डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता क्यों होती है?
यहाँ इस वर्णन करने के लिए एक छोटी सी उदाहरण है:
struct A {
public:
A() = delete;
A(A const&) = delete;
A(A &&a) {}
};
struct B {
A a;
B() = delete;
B(B const&) = delete;
B(B &&b) {}
};
इस संकलित करने के लिए कोशिश कर रहा है, मैं:
move_without_default.cc: In constructor ‘B::B(B&&)’:
move_without_default.cc:15:11: error: use of deleted function ‘A::A()’
B(B &&b) {}
^
move_without_default.cc:6:2: note: declared here
A() = delete;
^
क्यों यह एक त्रुटि है? इसके चारों ओर किसी भी तरह से?
'{}' '= default;' – cpplearner
को प्रतिस्थापित करें क्योंकि 'ए' का डिफ़ॉल्ट कन्स्ट्रक्टर हटा दिया गया है लेकिन 'बी' इसका उपयोग करता है। – tkausl
एक खाली चालक कन्स्ट्रक्टर स्वचालित रूप से सदस्य-दर-सदस्य कदम करने की कोशिश नहीं करेगा। आपका चालक कन्स्ट्रक्टर डिफ़ॉल्ट रूप से 'ए' बनाने की कोशिश कर रहा है, इसे स्थानांतरित नहीं करता है। – user2357112