何时使用emplace *以及何时使用push / insert

时间:2013-07-27 00:25:23

标签: c++11 stl emplace

我知道容器上的emplace函数的一般概念("在场内构建新元素")。
我的问题不是它的作用, 但更像是Effective C ++ 11 one。

决定何时使用的好规则(例如,std::vector时) emplace_back()以及何时使用push_back()并且通常使用{vs" old"插入功能?

1 个答案:

答案 0 :(得分:3)

emplace_back()只有在将对象放入容器之前必须从头开始构造对象时才真正有意义。如果你把它预先建好的对象交给它,它基本上会降级为push_back()。如果对象的复制成本很高,或者你必须在紧密的循环中创建大量的对象,你会发现差异很大。

我倾向于替换以下代码:

myvector.push_back(ContainedObject(hrmpf));

myvector.emplace_back(hrmpf);

如果前者显示在探查器输出上。对于新代码,如果可以的话,我可能会使用emplace_back(我们仍然主要是VS2010在工作,而emplace_back()的实现有点蹒跚)。