最近のインタビュープログラミングの課題で、C ++がどれほど錆びているかがわかったので、簡単なリンクリストを作成しました。私のリストでは、コピーの作成(そしてもちろん怠惰)を明示的に避けたかったので、プライベートコピーコンストラクターを宣言しました。リストの1つを所有する値でオブジェクトを返したいときに、問題が発生しました。
class Foo
{
MyList<int> list; // MyList has private copy constructor
public:
Foo() {};
};
class Bar
{
public:
Bar() {};
Foo getFoo()
{
return Foo();
}
};
Fooオブジェクトを値で返そうとすると、MyListにプライベートコピーコンストラクターがあるというコンパイラエラーが発生します。Return-Value-Optimizationは、コピーの必要性を否定する必要がありますか?コピーコンストラクターを作成する必要がありますか?この問題の解決策を探し始めるまで、移動コンストラクターについて聞いたことがありませんでしたが、それが最善の解決策ですか?もしそうなら、私はそれらを読む必要があります。そうでない場合、この問題を解決するための好ましい方法は何ですか?