我在类的析构函数中删除类属性时遇到问题,如果我尝试在经典程序程序中执行相同的操作,它就可以完美地运行。
但是如果我尝试执行下面的代码,析构函数不会delete
“数组”并且不释放内存:
class MyClass
{
private:
int *array;
int n = 2000000;
public:
MyClass(){
this->array = new int[n];
for(int i=0; i<n; i++){
array[i] = i;
}
}
~MyClass(){
delete[] array;
}
};
int main(int argc, const char * argv[])
{
MyClass *test = new MyClass;
delete test;
return 0;
}
为什么?
答案 0 :(得分:8)
如果执行了类的析构函数中的delete
语句,则构造函数中分配的内存将被释放并可供将来使用。
这并不意味着操作系统为实例化您的类的实际进程分配的内存将减少。
作为附加提示:要检测程序中“真正的”内存泄漏,请使用Valgrind之类的合适工具。
答案 1 :(得分:3)
当您使用new或malloc分配内存并在之后释放它时,它并不一定意味着内存将返回到操作系统。实现可以保持内存和后续对malloc或new的调用可以利用这个内存来避免再次从操作系统分配内存的开销。