我的问题涉及内存管理.
我有这个容器:
typedef hash_map<const string, Powerdomain*, strptrhash, strptrequal> PowerdomainHashMap;
Run Code Online (Sandbox Code Playgroud)
现在我在其中添加一个元素
PowerdomainHashMap powerdomainMap;
Powerdomain* pd1=new Powerdomain("Powerdomain1");
powerdomainMap.insert(Powerdomain_pair(pd1->getName(),pd1));
Run Code Online (Sandbox Code Playgroud)
之后,我的程序迈出了第一步.
现在第一步已完成,我不再需要powerdomains并想要删除它们.
是powerdomainMap.clear()足够的?它会破坏地图中的所有值条目(即在地图中的每个Powerdomain*上调用delete吗?
(我认为这比在地图上的迭代器上调用delete更好,但我不确定)
小智 5
不,它不会 - 您需要迭代地图并自己调用内容上的删除.或者更好的是,使用智能指针的地图,它将为您执行删除操作.另一种选择,如果你不需要多态,就是使用名称映射到值,而不是指针,在这种情况下,你可以完全失去动态内存管理的东西.