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

溫馨提示×

溫馨提示×

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

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

動態內存管理——new和delete底層探索

發布時間:2020-03-31 12:10:49 來源:網絡 閱讀:1916 作者:龍躍十二 欄目:編程語言

原文鏈接:https://blog.csdn.net/qq_38646470/article/details/79824464
專欄鏈接:https://blog.csdn.net/column/details/20026.html
[TOC]
#1.new/delete 和operator new/operator delete和malloc/free的關系
先寫個栗子看看new和delete的用法:

int main()
{
    int *p0 = new int;
    int *p1 = new int(10);
    int *p2 = new int[10];
    int *p3 = (int *)malloc(sizeof(int)*10);

    delete p0;
    delete p1;
    delete[] p2;
    free(p3);
    return 0;
}

動態內存管理——new和delete底層探索
再看看他們之間的關系:
動態內存管理——new和delete底層探索

#2.new時底層處理的機制
動態內存管理——new和delete底層探索

#3.new/delete和malloc/free的區別
1)malloc/free是C/C++語言的標準庫函數,new/delete是C++的運算符

    malloc與free是C++/C 語言的標準庫函數,new/delete 是C++的運算符。對于非內部數據類的對象而言,光用maloc/free 無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數, 對象消亡之前要自動執行析構函數。由于malloc/free 是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加malloc/free。
2)用法上也有所不同。

函數malloc 的原型如下:
void malloc(size_t size);
● malloc 申請一塊長度為size 個字節
● malloc 返回值的類型是void
,所以在調用malloc 時要顯式地進行類型轉換,將void 轉換成所需要的指針類型。
● malloc 函數本身并不識別要申請的內存是什么類型,它只關心內存的總字節數。
函數free 的原型如下:
void free( void
memblock );
● 如果p 是NULL 指針,那么free對p 無論操作多少次都不會出問題。
● 如果p 不是NULL 指針,那么free 對p連續操作兩次就會導致程序運行錯誤。

運算符new 使用起來要比函數malloc 簡單得多,例如:
int p1 = (int )malloc(size);
int *p2 = new int[size];
● new 內置了sizeof、類型轉換和類型安全檢查功能。
● 對于非內部數據類型的對象而言,new 在創建動態對象的同時完成了初始化工作。
● 如果對象有多個構造函數,那么new 的語句也可以有多種形式。

在用delete 釋放對象數組時,留意不要丟了符號‘[]’。例如
● delete []p2; // 正確的用法
● delete p2; // 錯誤的用法
后者相當于delete p2[0],漏掉了另外size-1個對象。

說來說去我們要明白new的底層是調用malloc,delete底層調用的是free。在c++中我們使用時要明白二者的區別和聯系。在使用new時一定用delete釋放,用malloc時一定用free釋放,這樣匹配防止程序以外崩潰。

向AI問一下細節

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

AI

荔波县| 扶沟县| 筠连县| 灵武市| 如东县| 滨海县| 瓮安县| 塘沽区| 岑巩县| 榆社县| 峡江县| 视频| 兰溪市| 太仓市| 大足县| 双城市| 济阳县| 吕梁市| 莱芜市| 延津县| 宣威市| 钦州市| 筠连县| 天柱县| 宝丰县| 分宜县| 余庆县| 漯河市| 德兴市| 开封县| 仪征市| 武义县| 调兵山市| 稷山县| 汾西县| 永吉县| 犍为县| 太和县| 卢氏县| 无极县| 湖口县|