看起来,它们的不同只是new比malloc用起来更方便而已。仅仅是这样吗?不是吗?
1 来源不同:
1)new/delete是C++中的操作符,而malloc/free是C中的标准库函数,需要库文件支持。为了保证程序的可读性和正确性,new与delete、malloc与free要配对使用;
2)可重载自定义:重载new/delete操作符,可实现在申请内存的时候自定义分配策略,如分配后自动初始化等;
3)new/delete可自动调用构造/析构函数,而malloc/free不会。
2 用法不同:
1)new不需要程序员计算内存,而malloc需要程序员计算出具体的字节数;
例如,申请一个长度为4的int数组的不同:
int *pArr=new int(4)
int *pArr=(int*)malloc(4*sizeof(int));
2)new返回的指针类型与申请类型一致,而malloc并不识别申请的内存是什么类型,它只关心申请空间的大小,返回指针类型为void*。
3 new是类型安全的,malloc不是。如:
int *p = new float[2]; //编译时错误
int *p = malloc (2*sizeof(float)); //编译时无法指出错误