কপি কনস্ট্রাক্টর (Copy Constructor)
একই ক্লাসের অন্য একটি অবজেক্ট থেকে নতুন অবজেক্ট ইনিশিয়ালাইজ করার জন্য ব্যবহৃত বিশেষ কনস্ট্রাক্টর। সিনট্যাক্স: ClassName(const ClassName &obj)।
কপি কনস্ট্রাক্টর কল হয় যখন:
- একটি অবজেক্ট অন্য অবজেক্ট দিয়ে ইনিশিয়ালাইজ করা হয়:
Class obj2 = obj1;বাClass obj2(obj1); - অবজেক্ট ভ্যালু বাই পাস (pass by value) হিসেবে ফাংশনে পাস করা হয়:
void func(Class obj)কল সময়। - অবজেক্ট ফাংশন থেকে ভ্যালু বাই রিটার্ন করা হয়:
Class func() { return obj; }
উদাহরণ ১: ফাংশন পাস বাই ভ্যালু
class Line {
int *ptr;
public:
Line(int len) { ptr = new int; *ptr = len; cout << "Normal ctor\n"; }
Line(const Line &obj) { ptr = new int; *ptr = *obj.ptr; cout << "Copy ctor\n"; }
~Line() { delete ptr; cout << "Dtor\n"; }
int getLength() { return *ptr; }
};
void display(Line obj) { // পাস বাই ভ্যালু -> কপি কনস্ট্রাক্টর কল
cout << "Length: " << obj.getLength() << endl;
}
int main() {
Line line(10);
display(line); // এখানে কপি কনস্ট্রাক্টর কল হবে
return 0;
}
আউটপুট
Normal ctor Copy ctor Length: 10 Dtor Dtor
উদাহরণ ২: অবজেক্ট কপি ইনিশিয়ালাইজেশন
int main() {
Line line1(10);
Line line2 = line1; // কপি কনস্ট্রাক্টর
display(line1); // আবার কপি কনস্ট্রাক্টর
display(line2); // আবার কপি কনস্ট্রাক্টর
return 0;
}
আউটপুট
Normal ctor Copy ctor Copy ctor Length: 10 Dtor Copy ctor Length: 10 Dtor Dtor Dtor
গভীর কপি (Deep Copy): পয়েন্টার মেম্বার থাকলে কপি কনস্ট্রাক্টরে নতুন মেমরি অ্যালোকেট করে ভ্যালু কপি করতে হয় (শ্যালো কপি এড়াতে)।