c++ - 未对 C++ STL 容器对象调用clear() 时发生内存泄漏

标签 c++ memory-leaks stl

假设我有一个类 Foo 定义如下。 如果我在~Foo()中没有bars.clear(),会导致内存泄漏吗? 我想知道这一点,因为 bars 是一个对象字段(而不是指针字段),所以当调用 ~Foo() 时, std::vector 的析构函数 应该自动调用,所以我想知道 std::vector 的析构函数是否会透明地调用 .clear()

    class Foo
    {
      private:
        std::vector<Bar*> bars;//object field

      ...
    };


    Foo::~Foo
    {
      //bars.clear();
    }

最佳答案

std::vector::clear()删除std::vector内的对象并更改其 std::vector::size()为零。如果您创建 std::vector ,RAII 将负责资源释放过程,但您必须等到超出 vector 范围。如果在超出范围之前,您需要清理 vector ,您可以使用 std::vector::clear() .

但在您的特殊情况下,您将指向 std::vector 内的对象的指针,因此 RAII 确实删除了指针,但忽略了指向该指针的对象。因此,您必须在超出范围且 RAII 变为事件之前或在调用 std::vector::clear() 之前自行清理指向指针的对象。

关于c++ - 未对 C++ STL 容器对象调用clear() 时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30395178/

相关文章:

c++ - 使用 C++ Mysql 驱动程序转义字符串

c++ - 子类化 QGraphicsItem 使我无法在 QGraphicsScene/View 上使用 itemAt()

c++ - 如何从qt中的字符串中获取子字符串?

iphone - 即使没有有效的内存泄漏,我的应用程序也会收到内存警告

c# - 为什么ASP Net Core 2.2不释放内存?

c++ - std::set_difference 中使用的 std:vector 中的断言错误

c++ - STL 映射值构造函数

c++ - 从 .txt 文件中读取多行作为字符串删除空格并创建新文件以进行输出

c - 我如何使用 free 来释放使用 malloc 进行的堆分配?

function - C++ : using class member and static function of same name but different parameters fails