delete與delete[]的區別
阿新 • • 發佈:2018-12-27
對於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次解構函式。