কম্পিউটার টিউটোরিয়াল

C++-এ কপি কনস্ট্রাক্টর কখন কল হয়? (When is copy constructor called in C++?)

কপি কনস্ট্রাক্টর (Copy Constructor)

একই ক্লাসের অন্য একটি অবজেক্ট থেকে নতুন অবজেক্ট ইনিশিয়ালাইজ করার জন্য ব্যবহৃত বিশেষ কনস্ট্রাক্টর। সিনট্যাক্স: ClassName(const ClassName &obj)।

কপি কনস্ট্রাক্টর কল হয় যখন:

  1. একটি অবজেক্ট অন্য অবজেক্ট দিয়ে ইনিশিয়ালাইজ করা হয়: Class obj2 = obj1; বা Class obj2(obj1);
  2. অবজেক্ট ভ্যালু বাই পাস (pass by value) হিসেবে ফাংশনে পাস করা হয়: void func(Class obj) কল সময়।
  3. অবজেক্ট ফাংশন থেকে ভ্যালু বাই রিটার্ন করা হয়: 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): পয়েন্টার মেম্বার থাকলে কপি কনস্ট্রাক্টরে নতুন মেমরি অ্যালোকেট করে ভ্যালু কপি করতে হয় (শ্যালো কপি এড়াতে)।

  1. C++-এ মিড-পয়েন্ট লাইন জেনারেশন অ্যালগরিদম (Mid-Point Line Generation Algorithm)

  2. সি++-এ কপি কনস্ট্রাক্টর (Copy Constructor) এবং অ্যাসাইনমেন্ট অপারেটর (Assignment Operator)-এর পার্থক্য

  3. C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা

  4. C#-তে স্ট্যাটিক কনস্ট্রাক্টর কখন কল হয়?