C++-এ, যখন ক্লাস তৈরি করা হয়, আমরা কপি কনস্ট্রাক্টর বা অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে এটি কপি করতে পারি। এই সেকশনে আমরা দেখব, কিভাবে C++-এ একটি ক্লাসের অবজেক্ট কপি রোধ করা যায়। অবজেক্ট কপি রোধ করতে আমরা কিছু নিয়ম মেনে চলতে পারি। এগুলো নিচের মতো।
১. প্রাইভেট কপি কনস্ট্রাক্টর এবং প্রাইভেট অ্যাসাইনমেন্ট অপারেটর তৈরি করা।
উদাহরণ
#include <iostream>
using namespace std;
class MyClass {
int x;
public:
MyClass() {
// নন-প্যারামিটারাইজড কনস্ট্রাক্টর
}
MyClass(int y): x(y) {
}
private:
MyClass(const MyClass& obj) : x(obj.x) {
// প্রাইভেট কপি কনস্ট্রাক্টর
}
MyClass& operator=(const MyClass& tmp_obj) {
// প্রাইভেট অ্যাসাইনমেন্ট অপারেটর (ওভারলোডেড)
x = tmp_obj.x;
return *this;
}
};
main() {
MyClass ob(50);
MyClass ob2(ob); // কপি কনস্ট্রাক্টর কল
ob2 = ob; // কপি অ্যাসাইনমেন্ট অপারেটর কল
}
আউটপুট
[Error] 'MyClass::MyClass(const MyClass&)' is private [Error] within this context [Error] 'MyClass& MyClass::operator=(const MyClass&)' is private [Error] within this context
২. ডামি ক্লাস থেকে ইনহেরিট করা যাতে প্রাইভেট কপি কনস্ট্রাক্টর এবং প্রাইভেট অ্যাসাইনমেন্ট অপারেটর থাকে।
উদাহরণ
#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); // কপি কনস্ট্রাক্টর কল
ob2 = ob1; // কপি অ্যাসাইনমেন্ট অপারেটর কল
}
আউটপুট
[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