別の質問で、移動コンストラクターを実装する場合、初期化子リストの各メンバーを 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 を使用する必要がないことを感謝します (不十分) が、メンバーがオブジェクトであるかどうかに興味があります。