天天看點

記憶體管理

malloc/free和new/delete的差別和聯系?

它們都是動态管理記憶體的入口。

malloc/free是C/C++标準庫的函數,new/delete是C++操作符。

malloc/free隻是動态配置設定記憶體空間/釋放空間。而new/delete除了配置設定空間還會調用構造函數和析構函數進行初始化與清理(清理成員)。

malloc/free需要手動計算類型大小且傳回值會void*,new/delete可自己計算類型的大小,傳回對應類型的指針。

C++中,new和delete是關鍵字。而C語言中malloc,calloc,realloc,free是函數。

operator new 和 operator delete是标準庫的函數,operator new 和 operator delete的函數名很容易讓人誤解。與其他的重載函數(如operator=)不同,這些函數沒有重載new/delete表達式,實際上我們不能重新定義new/delete表達式的行為。

不過可以重載operator new/operator delete這兩個函數。

operator new/operator delete 和 malloc/free功能類似,

malloc和free負責配置設定空間/釋放空間,不會調用對象構造函數/析構函數來初始化/清理對象。

實際上new做了兩件事(delete也是類似)

調用operator new配置設定空間。

調用構造函數初始化對象。

上一篇: 記憶體管理
下一篇: 記憶體管理