タイプ A のオブジェクトへのマップを生成する関数があります。
map<int,A> test()
{
map<int, A> m;
A a1(10); // constructor
A a2(20);
A a3(30);
m[0] = a1; m[1] = a2; m[2] = a3; // <-- copy constructor and = operator
return m;
}
この関数を実行すると、コンストラクターが呼び出され、コピー コンストラクターと = 演算子が呼び出されます。
map<int,A> x = test();
戻り値の最適化 (RVO) のように 1 つのコンストラクターのみを呼び出すようにコンパイラーを最適化する方法はありますか?
別のアプローチはポインターを使用することかもしれませんが、別の方法があるかどうか知りたいです。
map<int,A*> test3()
{
map<int, A*> m;
A* a1 = new A(10);
A* a2 = new A(20);
A* a3 = new A(30);
m[0] = a1; m[1] = a2; m[2] = a3;
return m;
}
...
map<int,A*> x = test3();
...
for (auto val: x)
{
delete val.second;
}