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(一个没有参数没有返回值的函数指针)来处理。
原文地址:https://www.cnblogs.com/wangdake-qq/p/7300781.html