我们应该如何实现对象类型的移动?
How should we implement moving for object types?
我正在阅读 C++11 中的移动语义,现在我正试图了解移动构造函数的实现。假设我们有以下 class:
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??
}
};
我的问题是如何在B
的一体机中调用A
的移动构造函数?我会使用 std::swap
,但寻找它我发现了一些 description。参数是 lvalue 引用类型,所以它与移动语义无关。怎么办?
B(B&& b)
: i(b.i)
, a(std::move(b.a))
{
}
请注意参数不再是 const
(它本来不应该是),并且所有初始化都可以使用 初始化列表 完成以获得最佳效率。
我正在阅读 C++11 中的移动语义,现在我正试图了解移动构造函数的实现。假设我们有以下 class:
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??
}
};
我的问题是如何在B
的一体机中调用A
的移动构造函数?我会使用 std::swap
,但寻找它我发现了一些 description。参数是 lvalue 引用类型,所以它与移动语义无关。怎么办?
B(B&& b)
: i(b.i)
, a(std::move(b.a))
{
}
请注意参数不再是 const
(它本来不应该是),并且所有初始化都可以使用 初始化列表 完成以获得最佳效率。