首页 > 编程知识 正文

new与malloc的区别,虚函数和纯虚函数的区别

时间:2023-05-03 19:36:51 阅读:146386 作者:438

new和malloc的区别是C/C的经典问题,我也遇到过几次,但没能很好地回答。 我今天特意整理了。

0 .属性

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

1 .参数

使用new操作符申请内存分配时,不需要指定内存块的大小。 编译器根据类型信息进行自我计算。 malloc必须明确指定所需内存的大小。

2 .返回类型

new操作符的内存分配成功后,将返回对象类型指针,类型与对象严格匹配,无需进行类型转换,因此new是符合类型安全的操作符。 malloc内存分配成功是返回void *,需要通过强制类型转换将void *指针转换为所需的类型。

3 .分配失败

如果new内存分配失败,将抛出bac_alloc异常。 如果malloc分配内存失败,则返回空值。

4 .自定义类型

new首先调用operator new函数以申请足够的内存。 基础通常使用malloc实现。 然后调用类型构造函数,初始化成员变量,最后返回到自定义类型指针。 delete调用析构函数,然后调用operator delete函数释放内存。 基础通常在free中实现。

malloc/free是库函数,只能动态申请和释放内存,不能强制自定义对象的生成和析构函数的工作。

5 .重载

c允许重新加载new/delete操作员。 特别是在布局new时,不需要为对象分配内存,而是将地址指定为内存开始区域,new在此内存中调用对象的构造函数以完成初始化任务并返回此地址。 malloc不允许重载。

6 .存储器区域

new操作符从“自由存储”(free store )动态分配内存空间给对象,而malloc函数从堆动态分配内存。 自由内存区域是c基于new操作符的抽象概念,当通过new操作符提交内存申请时,该内存就是自由内存区域。 堆是操作系统的术语,是操作系统维护的特殊内存,用于动态分配程序的内存。 c语言使用malloc从堆中分配内存,并使用free释放分配的相应内存。 自由商店和堆不一样。 如上所述,布局new可以不存在于堆中。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。