1. new/delete是c++的运算符, 而malloc/free是c语言的标准库函数,都可以用用来动态分配和释放内存。
2. 对于用户自定义对象而已,malloc只是分配空间,而new却能调用调用对象的构造函数,在delete时候调用对象的析构函数。
3. new可以认为是malloc加上构造函数的执行。new出来的指针式直接带类型信息的,而malloc返回的void*指针。
4. new/delete在实现上其实调用了malloc/free函数。
5. 用法上的不同:
malloc原型 void* malloc(size_t size);
int *p = (int *) malloc(sizeof(int) * length);
malloc函数本身并不识别申请的内存是什么类型的,它只关心内存的总字节数。
free 原型 void free(void * memblock);
直接使用就行。
运算符 new/delete
int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];
相比malloc简单不少,因为new内置了sizeof、类型转换和类型安全检查。
对于非内部对象,new创建动态对象的同时完成了初始化工作。
如果对象有多个构造函数,那么new语句也有多种形式。
Obj *objects = new Obj[100](1);
delete的时候要注意
delete []objects;
6.安全上的区别:
new是类型安全的,而malloc不是。
int* p = new float[2]; // 编译时指出错误
int* p = malloc(2*sizeof(float)); // 编译时无法指出错误