亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

為何在調用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

蕲春县| 新兴县| 秦皇岛市| 会昌县| 义马市| 扶沟县| 巢湖市| 壶关县| 加查县| 永新县| 五家渠市| 封丘县| 巴里| 岳阳市| 绥滨县| 南木林县| 潢川县| 会泽县| 菏泽市| 梁河县| 巩留县| 阜平县| 贵溪市| 津市市| 峨眉山市| 芒康县| 紫阳县| 西乌| 青龙| 石棉县| 合阳县| 汕尾市| 简阳市| 蓬莱市| 舒兰市| 宁安市| 泽普县| 日喀则市| 平江县| 定南县| 石林|