阿里面试官问的一个问题,没答出来。
1.申请内存所在位置
new申请内存的位置处于自由储存区,为动态对象分配空间;malloc分配空间处于堆
2.属性
new/delete属于C++中的一个关键字或操作符,需要编译器支持,malloc/free属于C的一个库函数,需要头文件支持
3.申请方式
new不用指定要分配的内存大小,由编译器自动计算,malloc需要显式的指出内存大小
4.返回类型
new分配内存成功后返回的是对象类型指针,因此不用进行强制类型转换,是符合类型安全性的操作符,malloc返回的是void*类型,需要进行强制类型转换成需要的类型。
5.分配失败
new分配失败会抛出bac_alloc异常,malloc返回NULL
6.过程
new经历三个过程:调用operator new函数申请足够内存,运行构造函数构造对象,返回对象类型指针
(delete:调用析构函数,编译器调用operator delete([])释放内存)
malloc没有调用构造函数和析构函数的过程。