是否可以在不调用包含对象的析构函数的情况下清空地图的内容?

时间:2012-03-13 02:35:11

标签: c++ stl map

我正在使用map来快速访问程序中的某些元素。我想从我的map中删除其中的一些元素(我在别处引用了它们)。有没有办法删除这些项目,而没有map的{​​{1}}或clear()函数调用它们的析构函数?

4 个答案:

答案 0 :(得分:2)

如果要将指针映射到对象,则不会销毁对象本身。如果对象本身在地图中,它们将被销毁。

答案 1 :(得分:2)

使用shared_ptr,这就是它的用途。如果项目“明确地”存储在其他地方,请考虑在地图中使用weak_ptr,并使用shared_ptr作为最终商店位置。

可能还有其他方法可以 工作,但是让自己头疼并使用正确的工具来完成工作。

答案 2 :(得分:1)

没有

如果元素按值存储,则无法执行此操作。如果你需要这种能力,可以考虑将它们放入智能指针(如unique_ptr,允许你.release()保持指针。

答案 3 :(得分:0)

没有;使用splice()方法的唯一标准容器是std::list。这意味着您可以将列表节点从一个列表移动到另一个列表,但不能映射或设置节点。