我正在阅读关于C ++ 11中的移动语义,现在我正在尝试理解移动构造函数的实现。假设我们有以下类:
struct A {
A(){ }
virtual ~A(){ }
A(const A&&){ }
};
struct B{
int i;
A a;
virtual ~B(){ }
B(const B&& b){
i = b.i;
i = 0;
//How to move a??
}
};
我的问题是如何在A
的一个机构内调用B
的移动构造函数?我使用的是std::swap
,但是我找到了description。参数是 左值 引用类型,因此它与移动语义无关。怎么办?
答案 0 :(得分:5)
B(B&& b)
: i(b.i)
, a(std::move(b.a))
{
}
请注意,参数不再是const
(它本来就不应该),并且可以使用初始化列表完成所有初始化,以获得最佳效率。