簡體   English   中英

刪除在析構函數中不起作用?

[英]delete doesn't work in destructor?

我在類的析構函數中刪除類屬性時遇到問題,如果我嘗試在經典程序程序中執行相同的操作,則它可以完美地運行。

但是,如果我嘗試執行下面的代碼,析構函數不會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;
}

為什么?

**別擔心!**(我應該說_'不要驚慌失措'?)

如果執行類的析構函數中的delete語句,則構造函數中分配的內存將被釋放並可供將來使用。

這本身並不意味着操作系統為實例化您的類的實際進程分配的內存將減少。

作為附加提示:要檢測程序中的“真實”內存泄漏,請使用Valgrind或類似工具。

當您使用new或malloc分配內存並在之后釋放它時,並不一定意味着內存將返回到操作系統。 實現可以保持內存和后續對malloc或new的調用可以利用這個內存來避免再次從OS分配內存的開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM