new/delete是C++运算符,malloc/free是<stdlib.h>中的库函数。由于C++中经常调用C函数,故保留了malloc/free;
主要区别表现在:
1.new可以自动计算所需空间,而malloc手动计算。 int*p=new int[5]; int*p=malloc(2*sizeof(int));
2.new返回具体类型指针,malloc返回void类型指针。
3.由于malloc返回void类型指针,如果没经过强制转换,在编译期间不会报错(申请int,用float*保存之类的错误)。
4.new操作可以重载,可以自定义内存分配策略。
5.new调用构造函数,delete调用析构函数。malloc/free不行。
6.new不需要头文件,只是运算符。
delete和free后内存并没有立即收回,内存内容还没更改,只是告诉操作系统,此块内存被释放了,可做他用。
因此,释放完内存后一定要把指针置为NULL;