我正在阅读关于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
,但寻找它我发现了一些描述.参数是左值引用类型,因此它与移动语义无关.该怎么办?
B(B&& b) : i(b.i) , a(std::move(b.a)) { }
注意参数不再是const
(它本来就不应该),并且可以使用初始化列表完成所有初始化以获得最佳效率.