30/09/2018, 23:42

Copy constructor C++ phải truyền vào đối tượng có tham chiếu, tại sao?

mình có 1 class và cần tạo ra các đối tương có dữ liệu cùng class này, tất nhiên là sử dụng constructor, nhưng trong class lại có biến con trỏ, nên mình k sử dụng constructor mặc định mà mình định nghĩa lại constructor mới, nhưng có 1 chỗ k được đả thông kinh mạch cho lắm,
tại sao phải truyền vào tham chiếu của đối tượng thuộc class muốn sao chép

ex:

class copy_constructor{
private:
	int songuyen;
	float sothuc;
public:

  	copy_constructor(const copy_constructor &test){  // truyền tham chiếu
		this->songuyen = test.songuyen;
		this->sothuc = test.sothuc;
	}
};
Nguyễn Xuân Phúc viết 01:45 ngày 01/10/2018

từ chính nó để suy luận ra thôi

  • Thứ nhất, vì sao là reference. Nếu ta truyền vào không phải là reference, tức pass by value thì khi gọi đến constructor, nó cần tạo object tạm mới để copy dữ liệu của object được truyền vào, rồi sau đó đem dữ liệu trong biến tạm, object tạm đó gán vào object đang khai báo. Nhưng: để tạo được một object tạm mới copy dữ liệu đưa vào, thì ta đang cần 1 copy constructor của class đó. Ủa mà ta đang đi tạo copy constructor mà? sao lại gọi đệ quy thế này? Vậy thì phải pass by reference để nó truyền nguyên địa chỉ, nguyên object cũ đang có vào, như vậy nó sẽ không phải tạo object tạm mới, không phải gọi đến copy constructor.
  • Thứ hai, vì sao phải là const: đơn giản là khi pass by reference thì dữ liệu của tham số object truyền vào có thể bị người dùng cố tình thay đổi trong constructor, như vậy để bảo toàn dữ liệu cho reference thì ta sẽ biến nó thành const, như thế thì không thể thay đổi dữ liệu ở trong này, đảm bảo vẹn toàn dữ liệu cho tham số.
abcxyz viết 01:53 ngày 01/10/2018

g có vào, như vậy nó sẽ không phải tạo object

tênh kiu, rất hài lòng với các câu trả lời của bạn

abcxyz viết 01:49 ngày 01/10/2018

xin hỏi, bạn có blog cá nhân không, cho mình xin, học hỏi

Nguyễn Xuân Phúc viết 01:52 ngày 01/10/2018

không có bác ơi,
rất lười viết blog :)))

Bài liên quan
0