01/10/2018, 11:49

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.

Dark.Hades viết 13:53 ngày 01/10/2018

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é

stackoverflow.com
paxdiablo

What does T&& (double ampersand) mean in C++11?

c++, c++11, rvalue-reference, c++-faq
asked by paxdiablo on 03:29AM - 30 Mar 11

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

phương thức khởi tạo sao chép

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

Ảnh Lê viết 13:51 ngày 01/10/2018

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

rogp10 viết 13:50 ngày 01/10/2018

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

Ảnh Lê viết 13:54 ngày 01/10/2018

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.

Dark.Hades viết 13:54 ngày 01/10/2018

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

Learn C++ – 13 Nov 07

8.5a — Constructor member initializer lists

In the previous lesson, for simplicity, we initialized our class member data in the constructor using the assignment operator. For example: [crayon-5b5556af43a13310509506/] When the class’s c…

Ảnh Lê viết 13:54 ngày 01/10/2018

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

Bài liên quan
0