相同点:都是运行时申请动态内存和释放内存
不同点:1、返回类型安全性:new返回对象类型的指针,类型严格与对象匹配,无需进行类型转换;malloc返回void*,需要强制转换为需要的类型
2、内存分配失败的返回值:new动态内存分配失败时,会抛出bad_alloc异常,而malloc分配失败时会返回NULL
3、是否需要指定内存大小:new运算符无需指定,编译器自动计算大小;malloc需要人工指定需要分配的内存大小
4、是否调用构造/析构函数:new的执行过程:分配原始内存->构造函数->返回指针,而malloc不会调用构造函数
5、是否可以被重载:new/delete可以被重载,malloc/free不可以被重载
6、能否直观重新分配内存:使用malloc分配内存后,如果使用过程发现内存不够用,可以使用realloc重新分配内存,如果当前位置有可用的内存,直接扩充,如果当前位置没有可用内存或者可用内存不够,找另一块内存,复制数据,释放原内存;而new只能重新另找一块内存,复制数据,释放原内存。
7、new/free是运算符,而malloc/free是库函数。
另:对于基本类型的数组,delete [ ] a和delete a是等价的,但是对于自定义数据类型来说,不等价。比如:int *a=new int[5],则delete a<->delete [ ] a