hash_map值删除
我的问题涉及内存管理。
我得到了这个容器:
typedef hash_map<const string, Powerdomain*, strptrhash, strptrequal> PowerdomainHashMap;
现在我在其中添加一个元素
PowerdomainHashMap powerdomainMap;
Powerdomain* pd1=new Powerdomain("Powerdomain1");
powerdomainMap.insert(Powerdomain_pair(pd1->getName(),pd1));
之后,我的程序执行了第一步。
现在第一步已经完成,我不再需要电源域并想删除它们。
powerdomainMap.clear()
是否足够?它会破坏地图中的所有值条目(即在地图中的每个 Powerdomain* 上调用删除吗?
(我认为这比在地图上的迭代器上调用删除更好,但我不确定)
My question concern memory management.
I got this container :
typedef hash_map<const string, Powerdomain*, strptrhash, strptrequal> PowerdomainHashMap;
now I add one element in it
PowerdomainHashMap powerdomainMap;
Powerdomain* pd1=new Powerdomain("Powerdomain1");
powerdomainMap.insert(Powerdomain_pair(pd1->getName(),pd1));
After that my program does a first step.
Now that the first step is done, i no longer need the powerdomains and want to delete them.
Is a powerdomainMap.clear()
sufficient ? Will it destroy all the value entries in the map (ie call delete on every Powerdomain* in the map?
(I think it is better than calling delete on a iterator on the map but i am not sure)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,它不会 - 您需要迭代地图并自己调用删除内容。或者更好的是,使用智能指针图来为您执行删除操作。如果您不需要多态性,另一种选择是使用名称到值的映射,而不是指针,在这种情况下,您可能会完全丢失动态内存管理内容。
No it won't - you need to iterate over the map and call delete on the contents yourself. Or better yet, use a map of smart pointers which will do the delete for you. Another alternative, if you don't need polymorphism, is to use a map of name to values, not pointers, in which case you can lose the dynamic memory management stuff altogether.
不可以。您已经手动获取了内存(使用
new
),您需要手动释放它(使用delete
)。不过,最好使用智能指针而不是原始指针(最好是std::shared_ptr
)。No. You have manually acquired memory (using
new
), you need to manually release it (usingdelete
). Better to use smart pointers instead of raw pointers though (preferablystd::shared_ptr
).