c++ delete 和 delete[]

 釋放的是內置類型

int *p = new int[2];
//釋放
delete p, 和用delete[] p 效果都可以正常釋放內存;

 釋放的是沒有析構函數的對象類型

class A{
public:
    A(){

    }
    //~A(){
    //
    //}
};

A *pA = new A[2]();
//如果沒有析構函數,這裏就分配2個字節內存,2個字節代表類對象數組佔用的;
//假如有析構函數,則分配6字節,2個字節代表類對象數組佔用的,額外4字節則是代表數組個數,在調用析構函數的時候,會去找這4個字節獲取數組大小,便於釋放內存。

//釋放,以下兩種釋放都可以正常釋放內存,因爲沒有定義析構函數
delete pA;
delete []pA;//假如沒有析構函數都一樣,有析構函數則必須用這個釋放內存

//所以假如不調用delete釋放內存的話,有析構函數的會泄漏6字節,沒析構函數的會泄漏2字節

 

結論:使用new[] 來分配內存,卻用單獨的delete(二不是delete[])來釋放內存的有以下幾種情況:

1.對象的類型是內置類型,比如是int,float

2.沒自定義析構函數的類類型,就像上面的對象A這種一樣,沒定義析構函數

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章