C++malloc/free與new/delete的區別
- 申請的內存所在位置不一樣:new在自由存儲區,malloc在堆;
- 返回類型的安全性:new返回對象指針,malloc返回void *;
- 是否調用類的構造函數、析構函數:new調用,malloc不調用
- 失敗時的返回值:new失敗時拋出異常bad_alloc,malloc返回null;
- 是否須要指定大小:malloc須要指定大小;
- 對數組的操做:new會對數組中的每個元素調用其構造函數,malloc並不知道所申請區域要存放的內容;
- 是否能夠互相調用:new能夠調用malloc,malloc不能調用new;
- 是否能夠重載:new能夠重載;
- 可否直觀的從新分配內存:new不能夠,malloc能夠利用realloc實現;
- 客戶可否對分配失敗進行處理:new能夠經過set_new_handler指定new_handle(一個沒有參數沒有返回值的函數指針)來處理。
歡迎關注本站公眾號,獲取更多信息