说我有以下课程:
class A {};
Class C {
private:
A a[10];
};
int main() {
C c;
}
此代码是否会导致内存泄漏?在编译器中,为C类定义的默认析构函数是否会成功释放A对象数组的内存?
我试图检查自己,但我无法弄清楚如何在OSX 10.7上运行valgrind ......
答案 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)
内存泄漏问题仅出现在动态内存分配中。对于自动分配的内存(通常在堆栈或数据段上),永远不会发生内存泄漏。