C++ new和malloc
在使用的时候 new,delete 搭配使用,malloc 和 free 搭配使用。
1、属性:malloc/free 是库函数,需要头文件的支持;new/delete 是关键字,需要编译器的支持。
2、参数:new 申请空间时,无需指定分配空间的大小,编译器会根据类型自行计算;malloc 在申请空间时,需要确定所申请空间的大小。
3、返回值:new 申请空间时,返回的类型是对象的指针类型,无需强制类型转换,符合类型安全的操作符;malloc 申请空间时,返回的是 void* 类型,需要进行强制类型的转换,转换为对象类型的指针。
4、分配失败:new 分配失败时,会抛出 bad_alloc 异常,malloc 分配失败时返回空指针。
5、重载:new/delete 支持重载,malloc/free 不能进行重载。
6、自定义类型实现:new 首先调用 operator new 函数申请空间(底层通过 malloc 实现),然后调用构造函数进行初始化,最后返回自定义类型的指针;delete 首先调用析构函数,然后调用 operator delete 释放空间(底层通过 free 实现)。malloc/free 无法进行自定义类型的对象的构造和析构。
7、内存区域:new 操作符从自由存储区上为对象动态分配内存,而 malloc 函数从堆上动态分配内存。(自由存储区不等于堆)
浙公网安备 33010602011771号