कभी-कभी सी ++ कक्षा में एक कॉपी कन्स्ट्रक्टर को प्रतिबंधित करना आवश्यक है ताकि कक्षा "गैर-प्रतिलिपि" हो। बेशक, operator=
एक ही समय में निषिद्ध होना चाहिए।सी ++ में एक कॉपी कन्स्ट्रक्टर को प्रतिबंधित करने का सबसे विश्वसनीय तरीका क्या है?
अब तक मैंने ऐसा करने के दो तरीके देखे हैं। मार्ग 1 निजी प्रणाली की घोषणा और यह कोई कार्यान्वयन दे रहा है:
class Class {
//useful stuff, then
private:
Class(const Class&); //not implemented anywhere
void operator=(const Class&); //not implemented anywhere
};
रास्ता 2 निजी प्रणाली की घोषणा और यह दे रहा है "खाली" कार्यान्वयन:
class Class {
//useful stuff, then
private:
Class(const Class&) {}
void operator=(const Class&) {}
};
IMO पहले एक बेहतर है - यहां तक कि अगर कुछ अप्रत्याशित कारण है जो कॉपी क्लास को उसी वर्ग सदस्य फ़ंक्शन से बुलाया जाता है तो बाद में एक लिंकर त्रुटि होगी। दूसरे मामले में इस परिदृश्य को रनटाइम तक अनजान छोड़ा जाएगा।
क्या पहली विधि में कोई गंभीर कमी है? अगर कोई और क्यों बेहतर तरीका है?
http://www.boost.org/doc/libs/1_46_1/boost/noncopyable.hpp – dgnorton