我的问题涉及记忆管理。
我有这个容器:
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更好但我不确定)
答案 0 :(得分:5)
不,它不会 - 你需要迭代地图并自己调用内容上的删除。或者更好的是,使用智能指针的地图,它将为您执行删除操作。如果你不需要多态,另一种选择是使用名称映射到 values ,而不是指针,在这种情况下,你可以完全失去动态内存管理的东西。
答案 1 :(得分:3)
powerdomainMap.clear()
是否足够?
没有。您已手动获取内存(使用new
),您需要手动释放它(使用delete
)。最好使用智能指针而不是原始指针(最好是std::shared_ptr
)。