new/delete與malloc/free

 

請你回答一下new/delete與malloc/free的區別是什麼

①它們都是動態管理內存的入口。

②malloc/free和operator new/operator delete是c++標準庫的函數,new/delete是c++操作符

③malloc/free只是動態分配內存空間;而new/delete除了分配空間還會調用構造函數和析構函數進行初始化與清理(清理成員);operator new/operator delete用法和malloc/free一樣,它們只負責分配空間/釋放空間,不會調用對象構造函數/析構函數來初始化/清理對象,實際上operator nre和operator delete只是malloc和free的一層封裝;

④malloc/free 和 operator new/operator delete需要手動計算類型大小且返回值爲void*(無類型指針),new/delete可自己計算類型的大小,返回對應類型的指針。

new和malloc的區別

1、分配內存:new分配內存按照數據類型進行分配,malloc分配內存按照指定的大小分配;

2、返回值:new返回的是指定對象的指針,而malloc返回的是void*,因此malloc的返回值一般都需要進行類型轉化

3、構造函數:new不僅分配一段內存,而且會調用構造函數,malloc不會。

4、析構函數:new分配的內存要用delete銷燬,malloc要用free來銷燬;delete銷燬的時候會調用對象的析構函數,而free則不會。

5、重載:new是一個操作符可以重載,malloc是一個庫函數。

6、擴容:malloc分配的內存不夠的時候,可以用realloc擴容。擴容的原理?new沒用這樣操作。

7、內存分配失敗:new如果分配失敗了會拋出bad_malloc的異常,而malloc失敗了會返回NULL。

8、申請數組時: new[]一次分配所有內存,多次調用構造函數,搭配使用delete[],delete[]多次調用析構函數,銷燬數組中的每個對象。而malloc則只能sizeof(int) * n。

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