亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除C+中的VS刪除[]運算符

刪除C+中的VS刪除[]運算符

C++
慕妹3146593 2019-07-09 10:44:39
刪除C+中的VS刪除[]運算符.之間的區別是什么?delete和delete[]C+中的運算符?
查看完整描述

3 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

這個delete操作符釋放內存,并為創建的單個對象調用析構函數。new.

這個delete []運算符釋放內存,并為創建的對象數組調用析構函數。new [].

使用delete返回的指針上new []delete []返回的指針上new導致不明確的行為。


查看完整回答
反對 回復 2019-07-09
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

這個delete[]運算符用于刪除數組。這個delete運算符用于刪除非數組對象。它叫operator delete[]operator delete函數分別刪除數組或非數組對象在(最終)調用數組元素或非數組對象的析構函數后占用的內存。

以下是關系:

typedef int array_type[1];// create and destroy a int[1]array_type *a = new array_type;delete [] a;
// create and destroy an intint *b = new int;delete b;// create and destroy an int[1]int *c = new int[1];delete[] c;
// create and destroy an int[1][2]int (*d)[2] = new int[1][2];delete [] d;

為了new創建一個數組(因此,new type[]new(應用于數組類型構造),標準查找operator new[]在數組的元素類型類或全局范圍中,并傳遞請求的內存量。它可能要求超過N * sizeof(ElementType)如果它想要(例如,存儲元素的數量,那么它以后在刪除時知道要執行多少析構函數調用)。如果類聲明operator new[]除內存量外,還接受另一個size_t,第二個參數將接收分配的元素數量-它可以將其用于它想要的任何目的(調試等.)。

為了new創建非數組對象時,它將查找operator new在元素的類或全局范圍中。它傳遞請求的內存量(完全正確)。sizeof(T)(一直如此)。

為了delete[],它查看數組的元素類型,并調用它們的析構函數。這個operator delete[]函數是元素類型類中的函數,如果沒有函數,則在全局作用域中。

為了delete,如果傳遞的指針是實際對象類型的基類,則基類必須具有虛擬析構函數(否則,行為未定義)。如果它不是基類,則調用該類的析構函數,并且operator delete在那類中還是全局的operator delete被利用了。如果傳遞了基類,則調用實際對象類型的析構函數,operator delete在該類中找到的是使用,或者如果沒有,則使用全局operator delete叫做。如果operator delete類中有第二個類型的參數。size_t,它將接收要釋放的元素的數量。


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 443 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號