Copy constructor (Hàm tạo sao chép) và toán tử gán (assignment operator) đều được dùng để khởi tạo một đối tượng từ một đối tượng khác. Khác biệt chính giữa chúng là: copy constructor tạo một khối bộ nhớ riêng biệt cho đối tượng mới. Nhưng toán tử gán không tạo không gian bộ nhớ mới. Nó dùng biến tham chiếu để trỏ đến khối bộ nhớ cũ.
Copy Constructor (Cú pháp)
classname (const classname &obj) { // thân constructor }
Toán tử gán (Cú pháp)
classname Ob1, Ob2; Ob2 = Ob1;
Hãy xem chi tiết sự khác biệt giữa Copy constructor và Toán tử gán.
| Copy Constructor | Toán tử gán |
|---|---|
| Copy constructor về cơ bản là một constructor được nạp chồng | Toán tử gán về cơ bản là một toán tử |
| Khởi tạo đối tượng mới với một đối tượng đã tồn tại | Gán giá trị của một đối tượng cho đối tượng khác, cả hai đã tồn tại |
| Copy constructor dùng khi tạo đối tượng mới từ đối tượng hiện có | Toán tử này dùng khi muốn gán đối tượng hiện có cho đối tượng mới |
| Cả hai đối tượng dùng vị trí bộ nhớ riêng biệt | Một vị trí bộ nhớ nhưng các biến tham chiếu khác nhau trỏ đến cùng vị trí |
| Nếu không định nghĩa copy constructor, trình biên dịch cung cấp một cái mặc định | Nếu không nạp chồng toán tử gán thì sẽ sao chép bitwise (bitwise copy) |