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则不需要库文件支持