- new和delete是C++关键字,需要编译器支持;malloc和free是库函数,需要头文件支持。
- new申请内存时无须指定内存大小,编译器根据类型信息自行计算;malloc则需要显式地指出所需内存的尺寸
- new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配;malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型
- new做两件事:分配内存和调用类的构造函数,delete是:调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。
- new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL。
- 内存泄漏对于new和malloc都能检测出来,而new可以指明是哪个文件的哪一行,malloc确不可以。
- new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。