我知道容器上的 emplace 函数的一般概念(“就地构造新元素”)。
我的问题不是它的作用,而是更像是有效的 C++11 之一。
什么是决定何时使用(例如何时使用std::vector
)
emplace_back()
和何时使用push_back()
以及一般 emplace* 与“旧”插入函数的好规则?
emplace_back()
只有在将对象放入容器之前必须从头开始构造对象时才真正有意义。如果你给它一个预先构建的对象,它基本上会退化为push_back()
. 如果对象的复制成本很高,或者您必须在紧密循环中创建大量对象,您通常会看到差异。
我倾向于替换以下代码:
myvector.push_back(ContainedObject(hrmpf));
和
myvector.emplace_back(hrmpf);
如果前者出现在探查器输出中。对于新代码,emplace_back
如果可以的话,我可能会使用(我们在工作中仍然主要使用 VS2010,它的实现emplace_back()
有点步履蹒跚)。