set::template如何处理已在集合中的对象

How does set::emplace handle objects that are already in a set?

本文关键字:集合 对象 处理 template 何处理 set      更新时间:2023-10-16

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

C++11,gcc 4.7.0

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

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

  • https://stackoverflow.com/a/20328676/560648

根据§23.2.4表102——相关集装箱要求(除集装箱外(

emplace(args)

效果:插入用std::forward<Args>(args)...构造的value_type对象t,当且仅当容器中没有键与t的键等效的元素时。