"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मूव कंस्ट्रक्टर कोड संकलित करते समय विजुअल स्टूडियो 2015 त्रुटि C2280 \"हटाए गए कॉपी कंस्ट्रक्टर\" की रिपोर्ट क्यों करता है?

मूव कंस्ट्रक्टर कोड संकलित करते समय विजुअल स्टूडियो 2015 त्रुटि C2280 \"हटाए गए कॉपी कंस्ट्रक्टर\" की रिपोर्ट क्यों करता है?

2024-11-17 को प्रकाशित
ब्राउज़ करें:633

Why Does Visual Studio 2015 Report Error C2280 \

विजुअल स्टूडियो 2015 रिपोर्ट C2280: "हटाए गए कॉपी कंस्ट्रक्टर" मुद्दे की खोज

विजुअल स्टूडियो 2013 में, निम्नलिखित कोड को संकलित करना त्रुटियों के बिना निष्पादित होता है :

class A {
public:
   A(){}
   A(A &&{}){};
};

int main(int, char*) {
   A a;
   new A(a);
   return 0;
}

हालाँकि, विज़ुअल स्टूडियो 2015 आरसी में संकलन करने पर, कंपाइलर त्रुटि C2280 उत्पन्न करता है:

1> c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)'
: attempting to reference a deleted function

त्रुटि के पीछे का कारण

विजुअल स्टूडियो 2015 अपने पूर्ववर्ती की तुलना में अलग व्यवहार करता है। सी मानक के अनुसार, यदि कोई क्लास परिभाषा एक मूव कंस्ट्रक्टर या मूव असाइनमेंट ऑपरेटर घोषित करती है, तो कंपाइलर अंतर्निहित रूप से एक कॉपी कंस्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटर को हटाए गए के रूप में उत्पन्न करता है। यह प्रदान किए गए कोड स्निपेट में मामला है, जहां मूव कंस्ट्रक्टर मौजूद है।

समस्या का समाधान

संकलन त्रुटि को हल करने के लिए, प्रतिलिपि की स्पष्ट घोषणा डिफॉल्ट के रूप में कंस्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटर आवश्यक है:

class A {
public:
   A(){}
   A(A &&{}){};
   A(const A&{}) = default;
};

इस संशोधन के साथ, कंपाइलर आवश्यक कॉपी कंस्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटर को हटाए गए के रूप में चिह्नित किए बिना उत्पन्न करेगा।

अतिरिक्त विचार

यदि क्लास मूव सिमेंटिक्स को परिभाषित करता है, तो आम तौर पर मूव असाइनमेंट ऑपरेटर और डिस्ट्रक्टर को भी परिभाषित करने की सिफारिश की जाती है। "पांच का नियम" सिद्धांत का पालन करने से उचित संसाधन प्रबंधन सुनिश्चित करने में मदद मिल सकती है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3