C/C++ - malloc/free和new/delete的区分

new/delete与malloc/free的区别主要表现在以下几个方面:

  注意:最主要的区别,new/delete是运算符,而malloc/free是函数

  (1)、new能够自动计算需要分配的内存空间,而malloc需要手工计算字节数。

      例如,int* p1=new int[2] , int* p2=malloc(2*sizeof(int))。

  (2)、new/delete返回直接带具体类型的指针,malloc/free返回void类型的指针。

  (3)、new是类型安全的,而malloc不是。例如,int* p=new float[2],编译时就会报错;而int* p=malloc(2*sizeof(float)),编译时编译器就无法指出错误来。

  (4)、new一般由两步构成,分别是new操作和构造。

      new操作对应于malloc,但new操作可以重载,可以自定义内存分配策略,不做内存分配,甚至分配到费内存设备上,而malloc不可以。

  (5)、new将调用构造函数,而malloc不能;delete将调用析构函数,而free不能。

  (6)、malloc/free需要库文件stdlib.h支持,new/delete则不需要库文件支持

  

猜你喜欢

转载自www.cnblogs.com/goul/p/9676116.html