【问题标题】:Pointer to Vector of pointers指向指针向量的指针
【发布时间】:2012-03-06 21:11:19
【问题描述】:

我正在更改其他人编写的一些代码。在代码的一部分中,他们使用了指向指针向量的指针。

            class2 *pointofclass2 = new class2();

        class1 * pointofclass1 = new class1(.....)

        pointofclass2->push_back(pointofclass1);

然后是代码

    delete pointofclass2;

现在我认为这会导致内存泄漏。我以前从未遇到过,所以不确定这是否是原因?任何帮助将不胜感激。如果是这样,释放内存的正确方法是什么?

【问题讨论】:

  • 那么class2 是否继承自vector?您绝对应该以您的方式删除pointofclass2,但您是否想知道pointofclass1 是否仍驻留在内存中的某个位置?应该在class2 的析构函数中清理它。你怎么知道你在泄漏内存?瓦尔格林?
  • A) 我有内存泄漏。例如当我运行程序时,它会继续消耗越来越多的内存(它不应该) B)我可能会从 Valgrind 中迷路,它显示了 class1 * pointofclass1 = new class1 (....) 的行。

标签: c++ memory pointers memory-leaks


【解决方案1】:

您正在删除 pointofclass2 但可能没有删除在 class1 的析构函数中保存 class1 指针的向量。在 new class1(...) 中创建的对象在哪里被删除?这是 C++,没有自动垃圾回收。

现在,如果 class2 是一个向量,您实际上并不需要创建指向它的指针,因为向量无论如何都会在堆上分配内存。

【讨论】:

    【解决方案2】:

    除非通过push_back() 添加的元素在class2 的dtor 中被销毁,否则这是一个泄漏。

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2018-08-28
      相关资源
      最近更新 更多