日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ new和malloc的区别

發布時間:2023/12/13 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ new和malloc的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里先對new和delete簡單進行一下總結,然后再細說new和malloc的區別。

一、new和delete
C語言提供了malloc和free兩個系統函數,完成對堆內存的申請和釋放。而C++則提供了兩個關鍵字new和delete;

1.1 規則

  • new/delete是關鍵字,效率高于malloc和free。
  • 配對使用,避免內存泄漏和多重釋放。
  • 避免交叉使用,比如malloc申請空間delete釋放,new出的空間被free。
  • new/delete 主要是用在類對象的申請和釋放。申請的時候會調用構造器完成初始化,釋放的時候,會調用析構器完成內存清理。

1.2 new/new[] 用法

//開辟單地址空間int *p = new int; //開辟大小為sizeof(int)空間int *q = new int(5); //開辟大小為sizeof(int)的空間,并初始化為5。//開辟數組空間//一維int *a = new int[100]{0};//開辟大小為100的整型數組空間,并初始化為0。//二維int (*a)[6] = new int[5][6];//三維int (*a)[5][6] = new int[3][5][6];//四維及以上以此類推。

1.3 delete/delete[] 用法

//釋放單個int空間int *a = new int;delete a;//釋放int數組空間int *b = new int[5];delete []b;

二、new和malloc的區別

2.1 屬性
new和delete是C++關鍵字,需要編譯器支持;malloc和free是庫函數,需要頭文件支持。

2.2 參數
使用new操作符申請內存分配時無須指定內存塊的大小,編譯器會根據類型信息自行計算。而malloc則需要顯式地指出所需內存的尺寸。

2.3 返回類型
new操作符內存分配成功時,返回的是對象類型的指針,類型嚴格與對象匹配,無須進行類型轉換,故new是符合類型安全性的操作符。而malloc內存分配成功則是返回void * ,需要通過強制類型轉換將void*指針轉換成我們需要的類型。

2.4 自定義類型
new會先調用operator new函數,申請足夠的內存(通常底層使用malloc實現)。然后調用類型的構造函數,初始化成員變量,最后返回自定義類型指針。delete先調用析構函數,然后調用operator delete函數釋放內存(通常底層使用free實現)。

malloc/free是庫函數,只能動態的申請和釋放內存,無法強制要求其做自定義類型對象構造和析構工作。

2.5 “重載”
C++允許自定義operator new 和 operator delete 函數控制動態內存的分配。

2.6 內存區域
new做兩件事:分配內存和調用類的構造函數,delete是:調用類的析構函數和釋放內存。而malloc和free只是分配和釋放內存。

new操作符從自由存儲區(free store)上為對象動態分配內存空間,而malloc函數從堆上動態分配內存。自由存儲區是C++基于new操作符的一個抽象概念,凡是通過new操作符進行內存申請,該內存即為自由存儲區。而堆是操作系統中的術語,是操作系統所維護的一塊特殊內存,用于程序的內存動態分配,C語言使用malloc從堆上分配內存,使用free釋放已分配的對應內存。自由存儲區不等于堆,如上所述,布局new就可以不位于堆中。

2.7 分配失敗
new內存分配失敗時,會拋出bac_alloc異常。malloc分配內存失敗時返回NULL。

2.8 內存泄漏
內存泄漏對于new和malloc都能檢測出來,而new可以指明是哪個文件的哪一行,malloc確不可以。

總結

以上是生活随笔為你收集整理的C++ new和malloc的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。