我有一个函数可以生成 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)呢?
替代方法可能是使用指针,但我想知道是否有另一种方法。
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;
}