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(一个没有参数没有返回值的函数指针)来处理。
相关文章
相关标签/搜索