91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為何在調用delete[]時括號中不需要指明元素的個數

發布時間:2022-01-05 09:46:13 來源:億速云 閱讀:117 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關為何在調用delete[]時括號中不需要指明元素的個數,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

首先為沒看懂問題的同學進行簡單的知識準備。

在C++中有一條簡單的規則,調用new申請的內存用delete釋放;調用new[]申請的內存就一定要用delete[]釋放。

考慮有以下類定義。

public:
    Test(){};
    ~Test(){};
};

當我們要在堆中創建一個新對象時,可以用以下代碼:

    ?Test* pTest = new Test;

當我們要釋放這個對象時可以使用以下代碼:

    delete pTest;

當我們要在堆中創建10個對象是可以使用以下代碼:

    Test* pTests = new Test[10];

當我們要釋放這10個對象時,與new[]相呼應,必須使用delete[]。

    delete [] pTest;

兩者的區別在在于帶的new[]和delete[]會對每個元素調用構造函數和析構函數。

以上是每個C++語法書都會降到的內容。算是知識準備。

接下來十問題:為什么在調用delete[]時,括號中不需要指明元素的個數?

據說初期的C++在調用delete[]時是需要的指定元素個數的,但那樣的話就會非常麻煩。所以后來進行了改進,在實現new[]的時候同時申請內存空間保存元素的個數。基本上是這個樣子:

struct array {
    size_t count_of_test;
   Test t[10];
};

在調用new[]時先通過malloc()申請內存時多申請一點空間保存count_of_test,然后是返回給用戶t空間的地址。這個地址要在malloc獲得的array地址上加一個偏移量。最后對這個t空間調用每個元素的構造函數。

調用delete[]的參數實際上是t空間的地址。先對這個地址參數進行減偏移量運算得到array地址并取得count_of_test,然后對t空間調用析構函數count_of_test次。最后以array地址作為參數調用free()函數。

除了正確調用構造函數/析構函數以外,還要處理保存元素個數的空間。

所以必須配對使用。

上述就是小編為大家分享的為何在調用delete[]時括號中不需要指明元素的個數了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌云县| 镶黄旗| 东台市| 禹城市| 沛县| 和田市| 贵阳市| 汉阴县| 永嘉县| 阳城县| 寿宁县| 东乡族自治县| 罗江县| 伊春市| 阜宁县| 行唐县| 云霄县| 马山县| 龙门县| 沾益县| 苗栗市| 彭山县| 汕尾市| 大新县| 宝山区| 鄂伦春自治旗| 山东省| 石首市| 大埔区| 西贡区| 广宗县| 邵阳县| 灌云县| 红河县| 龙泉市| 新平| 祁门县| 于田县| 望奎县| 宁乡县| 阿克苏市|