C++ new和delete malloc和free详解

版权声明:个人爱好,可随便转载 https://blog.csdn.net/qq_43528087/article/details/88924577

先说一下两者的区别

1.属性

new/delete是C++关键字,需要编译器支持
malloc/free是库函数,需要头文件支持

2.参数

使用new申请内存空间时无需指定内存块的大小,编译器会根据类型信息自行计算;而malloc则需要显式的指出所需内存的尺寸

3.返回类型

new申请成功时返回与对象类型相同的指针,无须进行类型转换;而malloc内存分配成功时返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型

4.分配内存失败

new内存分配失败时,会抛出bad_alloc异常(根据编译器而异,VC++6.0会返回空指针,gcc编译器会抛出异常),malloc分配内存失败时返回NULL

5.自定义类型

new会先调用operator new函数,申请足够的内存(底层通常通过malloc实现),然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针,delete先调用析构函数,然后调用operator delete函数释放内存(底层通常用free实现)
malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构函数

5.重载

C++允许重载new/delete操作符,而malloc不允许

6.内寸分配区域

1. new操作符从自由存储区上为对象动态分配内存空间,而malloc函数从堆上动态分配内存空间。
2. 自由存储区的分配依据堆来实现,它是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区,而堆是操作系统的术语,两者并不等价

猜你喜欢

转载自blog.csdn.net/qq_43528087/article/details/88924577