【发布时间】:2013-06-27 18:29:09
【问题描述】:
我在删除类的析构函数中的类属性时遇到问题,如果我尝试在经典程序程序中执行相同的操作,它会完美运行。
但是如果我尝试执行下面的代码,析构函数不会delete "array" 并且不会释放内存:
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;
}
为什么?
【问题讨论】:
-
为什么不改用
std::vector? -
内存没有立即返回给操作系统并不意味着内存没有在应用程序“堆”中被释放。
-
内存被标记为空闲,但它并未从进程中取消映射。原因之一是因为以后分配内存会更快,因为操作系统不必将新页面映射到进程。如果另一个进程迫切需要这些内存页面,它们将被重新映射。
-
只是好奇您使用的是哪个编译器?我使用 VS012 为数组分配/删除大量整数进行了测试,我可以看到内存是如何释放的。
标签: c++ memory-management destructor