1

可能重复:
std::vector.clear() 是否在每个元素上删除(可用内存)?

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

我应该delete在迭代或执行方法时显式调用erase()clear()为我执行此操作吗?

这是我的析构函数,它删除了分配的第二个元素new

        ~Event()
        {
            auto iter = mapper.begin();
            while (iter != mapper.end())
            {                   
                mapper.erase(iter++); // heap object
            }
        }
4

2 回答 2

3

您必须显式调用delete每个new元素。
标准库容器不获取分配给指针的动态内存的所有权。

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

于 2012-05-01T11:00:44.367 回答
2

不,不会的。您必须调用delete自己(或使用智能指针)。

于 2012-05-01T11:00:32.687 回答