delete與delete 的區別

2021-06-28 01:50:22 字數 466 閱讀 2056

如果是基本型別陣列呼叫delete就可以刪除之,而乙個自定義的結構陣列,卻最好使用delete,為什麼?原因如下:

y = new ***[10]

delete y;

10個元素所佔的記憶體都會被釋放,但是***如果有析構函式的話,只有第乙個元素的析構函式被呼叫,其他9個元素的析構函式沒有被呼叫

如果***的析構函式裡面有記憶體釋放動作或者資料庫鏈結關閉之類的, 就產生資源洩露了

如果***不需要析構函式,或者析構函式做一些無關緊要的動作, 就沒有洩露

加不加方括號[ ], 差別在於析構函式的呼叫次數, 元素本身所占用的記憶體都會被釋放掉

最早的c++編譯器是要求這樣寫的,  delete [10] y;

只是現在優化了, 編譯器產生**可以在執行期算出陣列的元素個數

醍醐灌頂了沒有,閒下來時還是得過看書啊!這個知識點在《inside the c++ object model 》

delete與delete 的區別

c 告訴我們在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。很多人注意到了這個問題,但是卻不清楚為什麼要這樣做,不這樣做行不行。關於 new 和 delete,其中又分為兩種情況 1 為基本資料型別分配和 空間 2 為自...

delete與delete 的區別

一直很好奇delete 和 delete 有什麼不同?今天我從彙編的角度看一看 測試源 include int main 使用vs2019檢視其內部實現 可以看到兩個內部實現是一樣的,說明delete 和 delete 使用沒有區別 可是在網上查詢資料說,當析構物件陣列時必須要用delete 如果使...

delete 與 delete 釋放記憶體

以下內容來引自 我們通常從教科書上看到這樣的說明 delete 釋放new分配的單個物件指標指向的記憶體 delete 釋放new分配的物件陣列指標指向的記憶體 那麼,按照教科書的理解,我們看下下面的 int a new int 10 delete a 方式1 delete a 方式2 肯定會有很多...