【问题标题】:C++ -- how to design the data structure so that it can avoid the memory leak [duplicate]C++——如何设计数据结构以避免内存泄漏[重复]
【发布时间】:2011-05-19 23:32:53
【问题描述】:

可能重复:
vector of pointer to object - how to avoid memory leak?

大家好,

我有以下代码,

vector<Student*> vec;
// populate vec with Student pointers

然后sort(vec.begin(), vec.end(), ...)根据分数对学生进行排序。

问题来了,

因为vector存储了指针,我们以后要记得手动删除它。 但是,我们不能将 auto_ptr 存储在向量中。

有没有更好的方法呢? 在向量内存储一个智能指针? 如何设计这个智能指针?

谢谢

【问题讨论】:

    标签: c++


    【解决方案1】:

    为了扩展 Colin 的答案,auto_ptr 对容器没有用,因为它不能被复制。您正在寻找的是一个引用计数的智能指针——共享指针或侵入式指针都可以完成这项工作。 Boost 为您提供了几个智能指针,包括 shared_ptr 和 intrusive_ptr。最有可能(从您的原始问题推断)boost::shared_ptr 是您想要的。

    【讨论】:

      【解决方案2】:

      像这样: boost smrtpntr,或者你可以模板化向量来删除它的析构函数中的对象,如果不小心这样做可能会产生意想不到的后果。

      【讨论】:

        【解决方案3】:

        在使用智能指针向量的另一面,正如 Colin 和 MarkD 所建议的那样,您也可以使用 boost::ptr_vector

        【讨论】:

          猜你喜欢
          • 2014-07-30
          • 1970-01-01
          • 2016-06-20
          • 2020-05-13
          • 1970-01-01
          • 2014-08-26
          • 2018-07-22
          相关资源
          最近更新 更多