hash_map值删除

发布于 2024-11-14 05:02:48 字数 547 浏览 2 评论 0原文

我的问题涉及内存管理。

我得到了这个容器:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执笏见 2024-11-21 05:02:48

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

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.

甜尕妞 2024-11-21 05:02:48

powerdomainMap.clear() 足够了吗?

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

Is a powerdomainMap.clear() sufficient ?

No. You have manually acquired memory (using new), you need to manually release it (using delete). Better to use smart pointers instead of raw pointers though (preferably std::shared_ptr).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文