您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)為何在調(diào)用delete[]時括號中不需要指明元素的個數(shù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
首先為沒看懂問題的同學進行簡單的知識準備。
在C++中有一條簡單的規(guī)則,調(diào)用new申請的內(nèi)存用delete釋放;調(diào)用new[]申請的內(nèi)存就一定要用delete[]釋放。
考慮有以下類定義。
public:
Test(){};
~Test(){};
};
當我們要在堆中創(chuàng)建一個新對象時,可以用以下代碼:
?Test* pTest = new Test;
當我們要釋放這個對象時可以使用以下代碼:
delete pTest;
當我們要在堆中創(chuàng)建10個對象是可以使用以下代碼:
Test* pTests = new Test[10];
當我們要釋放這10個對象時,與new[]相呼應,必須使用delete[]。
delete [] pTest;
兩者的區(qū)別在在于帶的new[]和delete[]會對每個元素調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)。
以上是每個C++語法書都會降到的內(nèi)容。算是知識準備。
接下來十問題:為什么在調(diào)用delete[]時,括號中不需要指明元素的個數(shù)?
據(jù)說初期的C++在調(diào)用delete[]時是需要的指定元素個數(shù)的,但那樣的話就會非常麻煩。所以后來進行了改進,在實現(xiàn)new[]的時候同時申請內(nèi)存空間保存元素的個數(shù)?;旧鲜沁@個樣子:
struct array {
size_t count_of_test;
Test t[10];
};
在調(diào)用new[]時先通過malloc()申請內(nèi)存時多申請一點空間保存count_of_test,然后是返回給用戶t空間的地址。這個地址要在malloc獲得的array地址上加一個偏移量。最后對這個t空間調(diào)用每個元素的構(gòu)造函數(shù)。
調(diào)用delete[]的參數(shù)實際上是t空間的地址。先對這個地址參數(shù)進行減偏移量運算得到array地址并取得count_of_test,然后對t空間調(diào)用析構(gòu)函數(shù)count_of_test次。最后以array地址作為參數(shù)調(diào)用free()函數(shù)。
除了正確調(diào)用構(gòu)造函數(shù)/析構(gòu)函數(shù)以外,還要處理保存元素個數(shù)的空間。
所以必須配對使用。
上述就是小編為大家分享的為何在調(diào)用delete[]時括號中不需要指明元素的個數(shù)了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。