什么是移动构造函数的正确方法?移动构造函数C++
class A{
...some stuff...
private:
int i;
std::string str;
};
A::A(A &&a)
{
*this = std::move(a);
};
或
A::A(A &&a)
{
this->str = std::move(a.str);
};
在第二种情况下,它是有用的为std ::移动()int值?
什么是移动构造函数的正确方法?移动构造函数C++
class A{
...some stuff...
private:
int i;
std::string str;
};
A::A(A &&a)
{
*this = std::move(a);
};
或
A::A(A &&a)
{
this->str = std::move(a.str);
};
在第二种情况下,它是有用的为std ::移动()int值?
无论如何,我认为你应该明确地设置int。此时,该值保持未初始化状态。无论如何,在第一种情况下,您只需将移动构造函数重定向到copy/move-operator =(无论您实现哪个)。由于operator =在移动构造函数被声明时被隐式删除,所以会产生编译错误。如果你实现移动赋值,我不认为第一种情况是错误的,但它看起来类似于你是第二个移动构造函数。 – Herbert
第二个选项只移动字符串,而不是对象本身。 你想移动对象及其成员,还是想克隆它? 移动意味着“移动语义”,而后者意味着“克隆”。 –