我有一组对象,我想使用emplace将对象添加到集合中。如果集合中不存在等效对象,则set :: \ templates会创建一个对象并将其放入集合中。如果集合已经具有等效对象,则set :: \ templates不会将对象添加到列表中。在这种情况下,它是创建对象并将其销毁,创建并泄漏它,还是根本不创建它?或者它会做其他事情吗?
C ++ 11,gcc 4.7.0
答案 0 :(得分:3)
来自§23.2.4表102 - 关联容器要求(除容器外)
emplace(args)
效果:当且仅当容器中没有与
value_type
键相同的键的元素时,插入t
对象std::forward<Args>(args)...
构造t
。 / p>
答案 1 :(得分:2)
它根本不应该构造对象,但它通常会(无论如何使用 libstd ++ );这在技术上是一个错误,但在标准中比其他任何东西都更多。
富勒的细节可以在我之前的答案中找到一个非常相似的问题: