Tôi hiểu rằng khi chúng tôi xác định hàm tạo bản sao lớp học của lớp là cần thiết như trạng thái Rule of three. Tôi cũng nhận thấy rằng các đối số của các nhà xây dựng bản sao thường là const
như các mã sau đây minh họa:Tại sao hàm tạo bản sao C++ phải sử dụng đối tượng const?
class ABC {
public:
int a;
int b;
ABC(const ABC &other)
{
a = other.a;
b = other.b;
}
}
Câu hỏi của tôi là những gì sẽ xảy ra nếu đối số của các nhà xây dựng bản sao không phải là const:
class ABC
{
public:
int a;
int b;
ABC(ABC &other)
{
a = other.a;
b = other.b;
}
}
Tôi hiểu rằng trong một số trường hợp, nếu đối số của hàm tạo bản sao là const thì việc thực hiện thứ hai sẽ thất bại. Ngoài ra nếu đối số của hàm tạo bản sao là const thì đối tượng được sao chép sẽ không thay đổi nội dung của nó trong suốt quá trình. Tuy nhiên, tôi nhận thấy rằng một số người vẫn sử dụng triển khai thứ hai thay vì thực hiện lần đầu tiên. Có bất kỳ lý do nào mà việc triển khai thứ hai được ưu tiên không?
Tại sao 'A' được sửa đổi trong 'ABC B (A)'? Nó có ý nghĩa rất ít và sẽ là hành vi khá trực quan. – juanchopanza
Có lẽ vì tác giả quên làm cho nó const. –
Nếu chúng ta đi theo tiêu đề của bạn, đây là một bản sao: [Tại sao đối số hàm tạo bản sao const] (http://stackoverflow.com/questions/1602058/why-is-the-copy-constructor-argument-const) (Nếu chúng ta đi đến cuối của văn bản của bạn, nó không phải) – jogojapan