程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C++中的delete

C++中的delete

編輯:關於C語言
 

為了防止內存洩漏,每一個動態內存分配必須有一個等同相反的內存釋放操作,delete和new相對應,也有作為操作符的delete和作為函數的delete。

第一,操作符delete,對應操作符new,釋放內存,並自動調用類的析構函數,調用格式:

delete pointer;

第二,函數delete,對應函數new,操作符delete會調用函數delete釋放內存,函數原型是:

void operator delete(void *buffer);

舉個例子,語句delete ps;(ps是string指針)

對應的代碼可能是這樣的:

ps->~string();

operator delete(ps);

 

最後需要注意的是如果使用了placement new,這種情況下需要顯式調用類的析構函數,而不要調用操作符delete,因為這塊內存不是由函數new分配的,只有你知道它來自哪裡。

 

最最後再回憶一下今天的內容吧:

1. 函數delete

void operator delete(void *buffer); 釋放buffer所指向的內存。

2. 運算符delete,最常用的,沒什麼可說的。

3. 函數delete不會自動調用類的析構函數,因為它對分配的內存類型一無所知;而運算符delete會自動調用類的析構函數。

4. 函數delete允許重載,而運算符delete不能被重載。

5. placement new返回的地址,需要顯式調用類的析構函數,而不要調用操作符delete。

6. 比new簡短多了。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved