1. 程式人生 > >delete與delete[]的區別

delete與delete[]的區別

對於delete與delete的區別,教課書上告訴我們:

delete   : 用來釋放new分配的單個物件指標指向的記憶體,
delete[] : 用來釋放new分配的物件陣列指標指向的記憶體。

其實實際情況是這樣嗎?我們使用new申請一個int或者char等標準資料型別的陣列,然後使用兩種方法釋放一下記憶體看看結果,我們可以發現兩種方式的效果是相同的。既然效果是相同的那為什麼會有delete[]出現呢?原因是教課書上描述的不全,兩種釋放空間的方法得加一個前提,這個前提是:不是標準資料型別,得是我們自己定義的資料型別,如類等。具體參見如下程式碼。

/**
*   difference of delete and delete[]
*/
#include <iostream>

using namespace std;

class A
{
private:
    int m_data;
public:
    A() { }
    ~A() { cout << "delete object." << endl; }
};

int main()
{
    A *a = new A[10];
    //delete []a;
    delete a;

    return 0;
}

上述程式碼中,如果我們使用 "delete a" 來釋放申請的空間,執行時會發生異常,

如果使用 "delete []" 釋放已申請的空間,則可以正常執行,且呼叫10次解構函式。