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