转载于:
作者:yangqi916
链接:https://www.jianshu.com/p/e97320f90e22
1、new操作符从
自由存储区(free store)
上为对象动态分配内存空间,而malloc函数从
堆
上动态分配内存。
2、new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合
类型安全
性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void
指针转换成我们需要的类型。
3、使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算,而malloc则需要显式地指出所需内存的尺寸。
4、new/delete会调用对象的构造函数/析构函数以完成对象的构造/析构。而malloc则不会。
5、
使用new[]分配的内存必须使用delete[]进行释放:
delete [] ptr;
new对数组的支持体现在它会分别调用构造函数函数初始化每一个数组元素,释放对象时为每个对象调用析构函数。注意delete[]要与new[]配套使用,不然会找出数组对象部分释放的现象,造成内存泄漏。
至于malloc,它并知道你在这块内存上要放的数组还是啥别的东西,反正它就给你一块原始的内存,在给你个内存的地址就完事。所以如果要动态分配一个数组的内存,还需要我们手动自定数组的大小:
int * ptr = (int
) malloc( sizeof(int)
10 );//分配一个10个int元素的数组
6、new/delete是C++运算符,可以被重载,malloc和free不能,他们是标准库函数。