整理了new和malloc的几点区别,记下来以防忘记。
1.申请的内存所在位置
new操作符从自由存储区上位对象动态分配内存空间,而malloc函数则从堆上动态分配内存。
2.返回类型安全性
new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无需类型转换。malloc内存分配成功则是返回void*类型。
3.内存返回失败返回值
new内存分配失败时,抛出bad_alloc异常,不会返回NULL;malloc分配内存失败时返回NULL。
C语言中判断内存是否分配成功:
int *a = (int *)malloc(sizeof(int)); if(NULL == a) {}
C++中采用上述判断则无意义,因为在程序执行到if语句,则代表内存分配成功。判断内存分配是否成功的语句如下:
try { int *a = new int[];} catch(bad_alloc) { }
4.是否调用构造析构函数
new需要,malloc则不需要
5.分配内存大小
new由编译器根据类型计算得出,malloc则必须显式指定内存大小
5.相互调用
new可以调用malloc,malloc不用调用new
6.重新分配内存
malloc可以通过realloc函数进行内存的重新分配,而new则不可
7.是否可以被重装
new可以,malloc不可以
8.C++提供了new[]与delete[]处理数组类型,malloc则无