hash_map值删除

时间:2011-06-06 11:30:17

标签: c++ hashmap

我的问题涉及记忆管理。

我有这个容器:

typedef hash_map<const string, Powerdomain*, strptrhash, strptrequal> PowerdomainHashMap;  

现在我在其中添加一个元素

PowerdomainHashMap powerdomainMap;
Powerdomain* pd1=new Powerdomain("Powerdomain1");
powerdomainMap.insert(Powerdomain_pair(pd1->getName(),pd1));  

之后我的程序迈出了第一步。

现在第一步已经完成,我不再需要powerdomains并且想要删除它们。

powerdomainMap.clear()是否足够?它会破坏地图中的所有值条目(即在地图中的每个Powerdomain *上调用delete吗?

(我认为它比在地图上的迭代器上调用delete更好但我不确定)

2 个答案:

答案 0 :(得分:5)

不,它不会 - 你需要迭代地图并自己调用内容上的删除。或者更好的是,使用智能指针的地图,它将为您执行删除操作。如果你不需要多态,另一种选择是使用名称映射到 values ,而不是指针,在这种情况下,你可以完全失去动态内存管理的东西。

答案 1 :(得分:3)

  

powerdomainMap.clear()是否足够?

没有。您已手动获取内存(使用new),您需要手动释放它(使用delete)。最好使用智能指针而不是原始指针(最好是std::shared_ptr)。