gpt4 book ai didi

以指针为键的 C++ 映射。内存管理

转载 作者:行者123 更新时间:2023-11-30 03:56:01 25 4
gpt4 key购买 nike

我有一个类似于 STL 的 map 实现,其中指针作为键。正如我注意到的那样, key 不会被 map 释放。因为我无法保留对所有指针的引用,所以我无法自己管理内存。我读了一些关于智能指针的文章,提出了两个问题:

  1. 除了使用之外,还有其他方法可以实现自动内存管理吗?智能指针?
  2. 当键不再存在或被映射中的另一个指针覆盖时,像 Boosts Smart Pointer 这样的智能指针是否会释放我的内存?

感谢您的帮助。

最佳答案

如果您在没有自定义比较器的情况下使用智能指针作为 std::map 中的键,那么它不起作用,因为您根本不会将一个对象替换为另一个对象,作为指向一个对象的指针不等同于另一个并且不会发生替换。如果您确实使用比较器,那么它仍然不会自动工作,因为键是一个常量,并且只有在您替换 map 中的项目时才会修改值。所以我认为您有 3 种方法可以解决您的问题(假设您使用自定义比较器):

  1. 仍然使用 std::map 但当替换元素时,首先移除先前的键/值对并插入新的对,不要使用运算符 [] 或赋值给 iterator->second
  2. 仍然使用 std::map 但将智能指针和数据保留在 value 部分并从您的对象复制键。
  3. 使用不同的容器,例如 Boost.Multi-index。您可能不需要多个索引,但此容器允许使用对象的一部分作为键和 replace 方法。

关于以指针为键的 C++ 映射。内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com