सी ++ में, जब कक्षाएं बनाई जाती हैं, तो हम इसे कुछ कॉपी कंस्ट्रक्टर या असाइनमेंट ऑपरेटर का उपयोग करके कॉपी कर सकते हैं। इस खंड में हम देखेंगे कि C++ में किसी क्लास की ऑब्जेक्ट कॉपी को कैसे रोका जाए। ऑब्जेक्ट कॉपी को रोकने के लिए हम कुछ नियमों का पालन कर सकते हैं। ये नीचे की तरह हैं।
1. प्राइवेट कॉपी कंस्ट्रक्टर और प्राइवेट असाइनमेंट ऑपरेटर बनाना।
उदाहरण
#include <iostream> using namespace std; class MyClass { int x; public: MyClass() { //non-parameterized constructor } MyClass(int y): x(y) { } private: MyClass(const MyClass& obj) : x(obj.x) { //private copy constructor } MyClass& operator=(const MyClass& tmp_obj) { //private assignment operator (overloaded) x = tmp_obj.x; return *this; } }; main() { MyClass ob(50); MyClass ob2(ob); // calls copy constructor ob2 = ob; // calls copy assignment operator }
आउटपुट
[Error] 'MyClass::MyClass(const MyClass&)' is private [Error] within this context [Error] 'MyClass& MyClass::operator=(const MyClass&)' is private [Error] within this context
2. प्राइवेट कॉपी कंस्ट्रक्टर और प्राइवेट असाइनमेंट ऑपरेटर के साथ डमी क्लास इनहेरिट करें।
उदाहरण
#include <iostream> using namespace std; class DummyClass { public: DummyClass() { } private: DummyClass(const DummyClass& temp_obj) { } DummyClass& operator=(const DummyClass& temp_obj) { } }; class MyClass : public DummyClass { int x; public: MyClass() { } MyClass(int y) : x(y) { } }; int main() { MyClass ob1(50); MyClass ob2(ob1); // Calls copy constructor ob2 = ob1; // Calls copy assignment operator }
आउटपुट
[Error] 'DummyClass::DummyClass(const DummyClass&)' is private [Error] within this context In function 'int main()': [Note] synthesized method 'MyClass::MyClass(const MyClass&)' first required here In member function 'MyClass& MyClass::operator=(const MyClass&)': [Error] 'DummyClass& DummyClass::operator=(const DummyClass&)' is private [Error] within this context In function 'int main()': [Note] synthesized method 'MyClass& MyClass::operator=(const MyClass&)' first required here