4

我有一组对象,我想使用 emplace 将对象添加到集合中。如果集合中尚不存在等效对象,则 set::emplace 创建一个对象并将其放入集合中。如果集合已经有一个等价对象,set::emplace 不会将对象添加到列表中。在这种情况下,它是创建对象并销毁它,创建它并泄漏它,还是根本不创建它?或者它会做其他事情吗?

C++ 11,GCC 4.7.0

4

2 回答 2

3

来自 § 23.2.4 表 102 — 关联容器要求(除了容器)

emplace(args)

效果:插入一个由当且仅当容器中没有与 key 等效的元素的元素时构造的value_type对象。tstd::forward<Args>(args)...t

于 2014-03-27T01:31:46.327 回答
2

它根本不应该构造对象,但无论如何它通常都会(当然使用libstd++);这在技术上是一个错误,但在标准中更是如此。

更详细的信息可以在我之前对一个非常相似的问题的回答中找到:

于 2014-03-27T01:39:05.417 回答