請你回答一下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。