可能重复:
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
}
}
答案 0 :(得分:3)
您必须在每个delete
元素上明确调用new
标准库容器不占用分配给指针的动态内存。
如果需要自动清理,则应使用智能指针作为容器元素。
答案 1 :(得分:2)
不,它不会。你必须自己打电话给delete
(或使用智能指针)。