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.
Bài liên quan
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
What does T&& (double ampersand) mean in C++11?
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ụ:
Đó 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
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:
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…
tks bạn. Mình đã hiểu rồi ạ