Thắc mắc về move constructor trong C++11

class ABC
{
private:
 	int m_member;
public:
 	ABC(const int &x) : m_member(x)
 	{
 	}
 	ABC(int &&x) : m_member(x)
 	{
 	}
 };

Chào các bạn, giả sử mình tạo lớp ABC có 1 thuộc tính m_member và 2 phương thức khởi tạo sao chép, các bạn cho mình hỏi một số thắc mắc sau:
+) Hai phương thức khởi tạo sao chép có gì khác nhau, dấu && ở phương thức thứ hai có nghĩa là gì?
+) Hai phương thức có phải đang sao chép bằng cách kế thừa từ chính thuộc tính của nó không, cơ chế hoạt động của nó như thế nào?
Mình xin cảm ơn.

Về dấu && kia nó được gọi là rvalue ref

Bạn có thể đọc bài này để hiểu rõ, đọc cả trong std doc nữa nhé

Còn câu bạn nói

là hoàn toàn sai, trong C++, copy constructor nó có nghĩa là copy đối tượng này sang một đối tượng khác, ví dụ:

class ClassName
{
  ClassName(const ClassName &obj);
};

Đó mới gọi là copy constructor, còn ở class của bạn nó chỉ là hàm construct bình thường thôi

2 Likes

bạn cho mình hỏi dấu " : " có tác dụng và nó được hiểu như thế nào ạ?

Cú pháp : trên là để kích hoạt constructor thành phần hay superclass.

nếu được bạn có thể nói rõ hơn hoặc có bài viết nào về nó được không. Mình rất cảm ơn vì điều đó.
Ngoài ra m_member(x); được set giá trị trực tiếp, mình không hiểu cho lắm.

Bạn có thể đọc thêm tại đây:

3 Likes

tks bạn. Mình đã hiểu rồi ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?