我在另一个问题中读到,在实现移动构造函数时,std::move 初始化器列表中的每个成员是一个好习惯,因为如果该成员恰好是另一个对象,那么将调用该对象的移动构造函数。像这样...
//Move constructor
Car::Car(Car && obj)
:
prBufferLength(std::move(obj.prBufferLength)),
prBuffer(std::move(obj.prBuffer))
{
obj.prBuffer = nullptr;
obj.prBufferLength = 0;
}
然而,在我见过的所有示例移动赋值运算符中,出于同样的原因,没有提到使用 std::move 。如果成员是一个对象,那么应该使用 std::move 吗?像这样...
//Move assignment
Car Car::operator=(Car && obj)
{
delete[] prBuffer;
prBufferLength = std::move(obj.prBufferLength);
prBuffer = std::move(obj.prBuffer);
obj.prBuffer = nullptr;
obj.prBufferLength = 0;
return *this;
}
更新:
我很欣赏在我选择的示例中不需要使用 std::move (差)但是我对成员是否是对象感兴趣。