我有一個問題,刪除類的析構函數內的類屬性,如果我嘗試在一個經典的過程程序中做同樣的事情,它完美的作品。刪除在析構函數中不起作用?
但是,如果我試圖執行析構函數下面的代碼不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;
}
爲什麼?
爲什麼不使用'std :: vector'來代替? –
僅僅因爲內存不會立即返回到操作系統,並不意味着內存不會在應用程序「堆」中被釋放。 –
內存被*標記爲空閒,但不會從該進程中未映射。其中一個原因是因爲未來分配內存的速度會更快,因爲操作系統不必將新頁面映射到進程。如果另一個進程迫切需要這些內存頁面,它們將被重新映射。 –