默认析构函数释放类的数组成员c ++

时间:2011-08-29 09:07:17

标签: c++ arrays class destructor

说我有以下课程:

class A {};

Class C {
private:
    A a[10];
};

int main() {
    C c;
}

此代码是否会导致内存泄漏?在编译器中,为C类定义的默认析构函数是否会成功释放A对象数组的内存?

我试图检查自己,但我无法弄清楚如何在OSX 10.7上运行valgrind ......

3 个答案:

答案 0 :(得分:2)

不,它不会导致内存泄漏。这些类根本不使用 new ,因此堆中没有动态分配的内存。

答案 1 :(得分:2)

这不会泄漏。如果要确保,请将调试语句放在A

的析构函数中

编辑:简单的例子......

#include <iostream>

class A 
{
public:
  A() { std::cout << "A::A()" << std::endl; }
  ~A() { std::cout << "A::~A()" << std::endl; }
};

Class C {
private:
    A a[10];
};

int main() {
    C c;
}

现在编译并运行上面的示例,应该生成第一个调试语句的10个实例和第二个调试语句的10个实例。最后10个语句是在销毁A的10个实例时生成的(这是自动完成的 - 因此术语自动存储,当它们超出范围时 - 在这种情况下,那就是C [拥有它们]的实例超出范围[在main]的末尾。)

答案 2 :(得分:2)

内存泄漏问题仅出现在动态内存分配中。对于自动分配的内存(通常在堆栈或数据段上),永远不会发生内存泄漏。