移動コンストラクターを持つ派生オブジェクトがあり、基本オブジェクトにも移動セマンティクスがある場合、派生オブジェクト移動コンストラクターから基本オブジェクト移動コンストラクターを呼び出す適切な方法は何ですか?
最初に最も明白なことを試しました:
Derived(Derived&& rval) : Base(rval)
{ }
ただし、これは Base オブジェクトのコピー コンストラクターを呼び出すことになるようです。次にstd::move
、次のようにここで明示的に使用してみました。
Derived(Derived&& rval) : Base(std::move(rval))
{ }
これはうまくいきましたが、なぜそれが必要なのか混乱しています。std::move
右辺値参照を返すだけだと思いました。しかし、この例rval
ではすでに右辺値参照であるため、 への呼び出しは不要std::move
です。ただし、ここで使用しない場合std::move
は、コピー コンストラクターを呼び出すだけです。では、なぜ への呼び出しがstd::move
必要なのですか?