Một hàm tạo sao chép được sử dụng để khởi tạo một đối tượng chưa được khởi tạo trước đó từ dữ liệu của một số đối tượng khác.
A(const A& rhs) : data_(rhs.data_) {}
Ví dụ:
A aa;
A a = aa; //copy constructor
Một toán tử gán được sử dụng để thay thế các dữ liệu của một khởi tạo trước đó đối tượng với dữ liệu số khác của đối tượng.
A& operator=(const A& rhs) {data_ = rhs.data_; return *this;}
Ví dụ:
A aa;
A a;
a = aa; // assignment operator
Bạn có thể thay thế cấu trúc sao chép bằng cấu trúc mặc định cộng với gán, nhưng điều đó sẽ kém hiệu quả hơn.
(Lưu ý thêm: Các triển khai của tôi ở trên chính xác là những triển khai mà trình biên dịch cấp miễn phí cho bạn, vì vậy sẽ không có ý nghĩa gì nếu bạn triển khai chúng theo cách thủ công. Nếu bạn có một trong hai cách này, có khả năng bạn đang quản lý thủ công một số tài nguyên. Trong trường hợp đó, theo Quy tắc số ba , rất có thể bạn cũng sẽ cần cái còn lại cộng với bộ hủy.)