現在、完全転送について読んでいますが、完全転送の目的は、左辺値を左辺値として、右辺値を右辺値として渡すことであると述べています。したがって、次の例を使用して完全な転送を理解しています。ここのfoo
オブジェクトには、コピーと移動の cnstr があり、コピーと移動の代入演算子もあります。
void mfoo(foo arg)
{
.......
}
template<typename T>
void relay(T&& arg)
{
mfoo(std::forward<T>(arg));
}
//Start here
foo f;
relay(std::move(f));
現在、VS2012 でこのコードをテストしており、move コンストラクターは一度だけ呼び出されます。私はそれが2回呼び出されることを期待していました。誰かが私にこれを説明できれば幸いです。最初の移動コンストラクターがリレーで呼び出され、次の移動コンストラクターが mfoo で呼び出されることを期待していました