set::template如何处理已在集合中的对象
How does set::emplace handle objects that are already in a set?
我有一组对象,我想使用模板将对象添加到集合中。如果集合中不存在等效对象,则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
的键等效的元素时。
相关文章:
- 保留计时器集合(对象与指针)的最佳方法
- 在具有自定义对象的集合中查找值
- 如何处理C 中对象的混合集合
- 如何创建异质对象的集合
- 如果对象尚未在集合中,则创建一个对象
- C++内存中的大型对象集合是否正常
- C++集合对象和 iStream 文件输入
- 只有Arduino的第一个对象在包含在另一个对象的集合/数组中时会丢失其数据属性值
- C 11按几个属性的自定义对象集合
- 位掩码:通过集合方法设置对象的不同状态
- 可以在C++中更改存储在集合中的对象的非关键部分.如何在java中进行类似操作
- 具有不同接口的对象的集合
- 集合中的不可变对象(C++ 和 Qt)
- C++维护子类对象的混合集合
- 无法将对象上的指针添加到集合
- 映射/集合迭代器不兼容-检查对象是否在映射中
- 如何将对象插入到集合中
- 如何在C++派生对象的集合中进行搜索和赋值
- boost::lockfree::队列似乎没有释放内存,尽管每个集合对象上的析构函数都被调用
- 如何在MPI_send中发送集合对象