malloc、free和new、delete的區別

首先應當明確的是malloc 和free搭配使用,new和delete搭配使用,最好搭配使用否則容易造成內存泄露!

malloc/free 是在C語言頭文件<stdlib.h>中定義的原型爲:

void * malloc(size_t size): 動態配置內存,大小由size決定,返回值成功時爲任意類型指針,失敗時爲NULL。

void  free(void *ptr)釋放動態申請的內存空間,調用free()後ptr所指向的內存空間被收回,如果ptr指向未知地方或者指向的空間已被收回,則會發生不可預知的錯誤,如果ptr爲NULL,free不會有任何作用。

兩個組合具有以下區別:

1. malloc和free是C語言中的標準庫函數,new和delete是C++中的運算符。所以從這一點上來說new/delete組合具有比malloc/free組合更高的執行效率。

2. malloc和new都申請內存空間。但是malloc函數只負責申請一定大小的空間不初始化,而new操作符在申請一定大小的空間之後會調用類的構造函數進行初始化。類似的,free函數會釋放malloc申請的空間,而delete操作符在釋放new申請的地址空間之前會執行對象的析構函數。

3.malloc和free返回void類型指針,new和delete直接帶具體類型的指針。

4.malloc/free只適合用於int、char、結構體等基本數據類型,new/delete適合包括類在內的所有數據類型。單從這一點來看new/delete的功能完全覆蓋了malloc/free的功能。C++中之所以還保留malloc/free函數的用法是爲了調用C函數時的兼容。

C++中對象在創建的時候要自動執行構造函數,在消亡之前要自動執行析構函數。所以應該把自動執行構造函數和析構函數的重任交給new和delete。


歡迎大家批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章