はい、あなたが持っているものは正しいです。使用する必要があるstd::moveか、コードがコンパイルされません。理由はすぐにはわからないかもしれません。次のように関数を呼び出すと:
AClass *a = aFunction(BigClass{});
aFunctionBigClassのデフォルトコンストラクタからの戻り値である右辺値で呼び出されます。しかし、内部aFunctionでは、変数bcは左辺値です。名前がある場合、それは左辺値であることを忘れないでください。の move コンストラクターを使用するにはbc、右辺値に変換する必要があります。std::moveAClass
これをより明確に確認するために、いくつかの出力 (およびコピー コンストラクター) を に追加してみましょうAClass。
AClass( BigClass & bc ) : m_bc{bc} { std::cout << "Copy\n"; }
AClass( BigClass && bc ) : m_bc{std::move(bc)} { std::cout << "Move\n"; }
をstd::move除外するとaFunction、コピーが取得されます。それがあれば、あなたは動きを得るでしょう。