gpt4 book ai didi

c++ - C++ 集合中对象的内存管理

转载 作者:太空狗 更新时间:2023-10-29 19:45:07 24 4
gpt4 key购买 nike

我有一个将整数与(对象的) vector 相关联的映射。这些 vector 代表一组要执行的任务。为了减少使用此 map 和 vector 时进行的复制量,我将它们设置为使用指针。

std::map<int, std::vector<MyObject *> *> myMap;

在初始化包含 myMap 的类期间,我通过创建一个填充有新 MyObject 的新 vector 来填充 myMap。

然而,我关心的是内存管理。现在,我将这些不同的对象堆放在某个地方,我负责在处理完它们后清理它们。我也知道在程序完成之前我永远不会完成它们。但是 10 周后,当有人决定修改此应用程序的巧妙方法是从 map /vector 中删除项目时,情况会怎样。这会导致内存泄漏。

我的问题是如何处理这些对象的正确释放,以便即使它们通过 STL 函数被删除,对象也能成功释放?

非常感谢您的帮助,如果我遗漏了任何重要信息,请告诉我!谢谢!

最佳答案

使用智能指针 boost:shared_ptr 而不是原始指针,这样当对象被销毁时它也会清除堆分配的内存。

boost::shared_ptr http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/shared_ptr.htm

还有指向 vector 的指针真的有理由吗?它们几乎不占用空间,并且 std::map 中的对象无论如何都不会移动(不像 vector 中的对象,每次 vector 重新分配时都会移动/复制,例如以获得更多空间)。

编辑:shared_ptr 也是 tr1 的一个组件,我很确定它在下一个标准中,所以你的编译器可能已经有了它。还有很多其他智能指针是 STL 安全的,可以让您了解如何编写自己的智能指针,在 Google 上快速搜索应该可以找到它们。

编辑2:刚刚检查过,TR1 的 Visual Studio 2008 实现包括 Visual C++ 2008 Feature Pack 中包含的 shared_ptr .我希望许多其他供应商至少有部分 TR1 的实现可用,因此如果您不使用 VS,请搜索您的供应商站点以获取 TR1 支持。

关于c++ - C++ 集合中对象的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1153064/

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