我知道容器上的emplace函数的一般概念("在场内构建新元素")。
我的问题不是它的作用,
但更像是Effective C ++ 11 one。
决定何时使用的好规则(例如,std::vector
时)
emplace_back()
以及何时使用push_back()
并且通常使用{vs" old"插入功能?
答案 0 :(得分:3)
emplace_back()
只有在将对象放入容器之前必须从头开始构造对象时才真正有意义。如果你把它预先建好的对象交给它,它基本上会降级为push_back()
。如果对象的复制成本很高,或者你必须在紧密的循环中创建大量的对象,你会发现差异很大。
我倾向于替换以下代码:
myvector.push_back(ContainedObject(hrmpf));
与
myvector.emplace_back(hrmpf);
如果前者显示在探查器输出上。对于新代码,如果可以的话,我可能会使用emplace_back
(我们仍然主要是VS2010在工作,而emplace_back()
的实现有点蹒跚)。