STL容器的Clear()方法是否在堆对象上调用delete?

时间:2012-05-01 10:57:54

标签: c++ dictionary iterator delete-operator

  

可能重复:
  Does std::vector.clear() do delete (free memory) on each element?

我有一个地图,其中第二个元素是堆分配的。

我应该在迭代时明确地调用delete,还是方法erase()clear()为我做这个?

这是我的析构函数,它会删除用new

分配的第二个元素
        ~Event()
        {
            auto iter = mapper.begin();
            while (iter != mapper.end())
            {                   
                mapper.erase(iter++); // heap object
            }
        }

2 个答案:

答案 0 :(得分:3)

您必须在每个delete元素上明确调用new 标准库容器不占用分配给指针的动态内存。

如果需要自动清理,则应使用智能指针作为容器元素。

答案 1 :(得分:2)

不,它不会。你必须自己打电话给delete(或使用智能指针)。