malloc与new的区别

1.属性

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

2.自定义类型

new会先调用operate new()函数,申请足够的内存空间(malloc实现),然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针(也就是类指针)。

delete则先调用析构函数,然后调用operate delete()函数释放内存(free);

注意:new[]  delete[]提供了对数组批量处理的支持,表现在它会分别调用构造函数函数初始化每一个数组元素(这里的每一个元素都代表着对象),释放对象时为每个对象调用析构函数。

malloc/free只是库函数,无法满足我们对自定义类型做构造和析构。

3.申请的位置

malloc申请的内存是堆上的空间 堆是操作系统术语,是操作系统维护的一块特殊内存

new申请的内存是自由存储区的空间     自由存储区是C++基于new操作符的一个抽象概念

4.返回类型

malloc内存分配成功返回void* 程序员用强制类型转换得到我们需要的类型 分配失败时返回NULL

new操作符内存分配成功时返回对象类型的地址,类型严格与对象匹配,无需强转 分配失败时抛出bac_alloc异常

5.指定大小

malloc分配内存空间需要程序员显示的表明需要多大的空间

new会得到编译器的帮助,根据类型信息自动计算所需空间

6.重载

C++允许重载new/delete运算符,比如布局new就不需要为对象分配内存,而是指定一个地址作为起始区域,new在这段空间上完成初始化工作,并返回地址。

malloc没有这个功能。

7.扩展性

malloc分配内存之后,可以使用relloc重新调整大小,而new没有这个功能

 

posted @ 2021-02-05 00:50  SjYu  阅读(168)  评论(0编辑  收藏  举报