ตัวสร้างการคัดลอกและตัวดำเนินการกำหนดใช้เพื่อเริ่มต้นวัตถุหนึ่งไปยังวัตถุอื่น ความแตกต่างที่สำคัญระหว่างพวกเขาคือตัวสร้างการคัดลอกสร้างบล็อกหน่วยความจำแยกต่างหากสำหรับวัตถุใหม่ แต่ตัวดำเนินการมอบหมายจะไม่สร้างพื้นที่หน่วยความจำใหม่ ใช้ตัวแปรอ้างอิงเพื่อชี้ไปที่บล็อกหน่วยความจำก่อนหน้า
คัดลอกตัวสร้าง (ไวยากรณ์)
classname (const classname &obj) { // body of constructor }
ตัวดำเนินการมอบหมาย (ไวยากรณ์)
classname Ob1, Ob2; Ob2 = Ob1;
ให้เราดูความแตกต่างโดยละเอียดระหว่าง Copy Constructor และ Assignment Operator
คัดลอกตัวสร้าง | ตัวดำเนินการมอบหมาย |
---|---|
คอนสตรัคเตอร์การคัดลอกนั้นเป็นคอนสตรัคเตอร์ที่โอเวอร์โหลด | ตัวดำเนินการมอบหมายนั้นเป็นโอเปอเรเตอร์ |
สิ่งนี้จะเริ่มต้นวัตถุใหม่ด้วยวัตถุที่มีอยู่แล้ว | สิ่งนี้กำหนดค่าของวัตถุหนึ่งให้กับวัตถุอื่นซึ่งทั้งคู่มีอยู่แล้ว |
Copy constructor ใช้เมื่อมีการสร้างวัตถุใหม่ด้วยวัตถุที่มีอยู่แล้ว | ตัวดำเนินการนี้ใช้เมื่อเราต้องการกำหนดวัตถุที่มีอยู่ให้กับวัตถุใหม่ |
วัตถุทั้งสองใช้ตำแหน่งหน่วยความจำแยกกัน | ใช้ตำแหน่งหน่วยความจำหนึ่งตำแหน่ง แต่ตัวแปรอ้างอิงต่างกันชี้ไปที่ตำแหน่งเดียวกัน |
หากไม่มีการกำหนดคอนสตรัคเตอร์การคัดลอกในคลาส คอมไพเลอร์จะจัดเตรียมไว้ | หากตัวดำเนินการมอบหมายไม่โอเวอร์โหลด ระบบจะทำการคัดลอกระดับบิต |