C++malloc/free與new/delete的區別

  1. 申請的內存所在位置不一樣:new在自由存儲區,malloc在堆;
  2. 返回類型的安全性:new返回對象指針,malloc返回void *;
  3. 是否調用類的構造函數、析構函數:new調用,malloc不調用
  4. 失敗時的返回值:new失敗時拋出異常bad_alloc,malloc返回null;
  5. 是否須要指定大小:malloc須要指定大小;
  6. 對數組的操做:new會對數組中的每個元素調用其構造函數,malloc並不知道所申請區域要存放的內容;
  7. 是否能夠互相調用:new能夠調用malloc,malloc不能調用new;
  8. 是否能夠重載:new能夠重載;
  9. 可否直觀的從新分配內存:new不能夠,malloc能夠利用realloc實現;
  10. 客戶可否對分配失敗進行處理:new能夠經過set_new_handler指定new_handle(一個沒有參數沒有返回值的函數指針)來處理。
相關文章
相關標籤/搜索