class Foo { int a; int b; int c; std::wstring d; std::vector<char*> e };
假设std::vector
有一个大字符串(~512字节)和~512字节,它的用例如下:
void Test()
{
Foo foo;
DoSomething(std::move(foo)); // DoSomething will stuff it in a long-lived queue
}
基本上我希望RAII的对象的生命周期能够改变。
这是我实现移动构造函数和赋值运算符的时候吗?或者只是做std::move(..)
就足够了?
答案 0 :(得分:4)
std::move
就没用了。
但是,您班级的所有成员都是可移动的,并且您没有任何用户定义的析构函数,复制构造函数或复制赋值运算符,因此将有一个隐式定义的移动构造函数和移动赋值运算符执行正确的操作。
因此,在这种特定情况下,答案是您不需要定义移动构造函数或赋值运算符。