您的位置

006足球直播间:【C++深度解析】40、new和malloc的區別

來源:2012奥运会足球直播表 點擊:1127

2012奥运会足球直播表 www.ubmml.com.cn 文章目錄1 2 new/delete和malloc/free mix 2.1 new apply for free release-memory leak 2.2 malloc apply for delete release-銷毀不存在的對象3 summary

1 new和malloc

1,attribute

new/delete之間的區別是c關鍵字。Malloc/free是一個庫函數。

2。參數

new以特定類型分配內存。Malloc需要明確指出所需內存的字節數。

3。當return type

new運算符的內存分配成功時,將返回對象類型的指針,并且不需要類型轉換。

malloc函數成功并返回了void*,該函數需要強制轉換為我們需要的類型。

4。分配失敗

new當內存分配失敗時,將引發bac_alloc異常。當無法分配內存時,Malloc返回空值。

5。構造函數析構函數

new可以觸發構造函數的調用,并且可以在申請空間時進行初始化。Delete首先調用析構函數,首先銷毀對象,然后釋放內存空間。

malloc只分配所需的內存空間,free只返回分配的內存空間。它不適合面向對象的開發,因為它不能完成類對象的構造和銷毀。

6。重載

C允許重載新的/刪除操作符,malloc不允許重載。

7,Memory Area

new運算符從空閑存儲區為對象動態分配內存空間,而malloc函數從堆動態分配內存。自由存儲區是一個基于新算子的抽象概念。任何通過新操作員的內存應用程序都是自由存儲區。堆是由操作系統維護的特殊內存??捎么媧⑶蠆壞扔詼?,并且新應用程序的對象不能位于堆中。

如果您在函數上定義一個指針變量,然后在函數中申請一段內存,使指針指向它。事實上,這個指針的地址在堆棧上,但是它指向的內容在堆上!

programming experience:new和malloc

new之間的差異會觸發構造函數,在初始化之前申請空間。Delete首先調用析構函數,首先銷毀對象,然后釋放內存空間。

malloc只分配內存,free只返回分配的內存空間。類對象構造和析構無法完成。

所以第22行調用構造函數,第24行調用析構函數。第23行和第25行不會調用構造函數

compile and run

2 new/delete和malloc/free mix

如果我們混合它們呢

2.1 new申請免費釋放c內存泄漏

如果上述代碼的第24行被改為free(pn);換句話說,釋放新應用的空間會導致內存泄漏。當在構造函數中應用空間時,free不會觸發析構函數,也不會釋放構造函數釋放的空間,從而導致內存泄漏。它沒有摧毀物體,只是釋放了空間。

編譯并運行,您可以看到析構函數沒有被調用。

2.2 malloc申請刪除版本c來銷毀不存在的對象

如果上述代碼的第25行被改為刪除pm;Delete調用析構函數,malloc沒有調用構造函數來創建對象,而是在這里調用析構函數,這可能會導致問題。

編譯并運行,這里沒有報告錯誤,但是析構函數釋放資源可能會產生深遠的影響,所以不要使用它。

所以:新的應用空間應該通過刪除來釋放,malloc應用資源應該自由釋放

3 Summary

1,新的將觸發構造函數,刪除將觸發析構函數

2,malloc/free不適合面向對象的開發



{ganrao} 在线免费注册a片 win007球探比分 重庆幸运农场开奖 内蒙古时时彩 国产亚洲观看视频在线 秒速牛牛开奖机会平台 极速时时彩 捷报比分网足球预测 陕西麻将怎么打 日本黄色片排行榜 石家庄按摩推荐 灰熊vs雷霆季后赛 重庆幸运农场 欧洲杯即时赔率澳门 微信手机麻将四人联机