面试题——“new和delete” “malloc/free和new/delete的区别”

  C++提出new和delete,主要是解决两个问题:

1、自定义类型对象自动申请的时候,初始化和清理的问题。new/delete会调用构造函数和析构函数

2、new失败了以后要求抛异常,这样才符合面向对象语言的出错处理机制。

ps: delete和free一般不会失败,如果失败了,都是释放空间上存在越界或者释放指针位置不对

new和delete:

new动态申请的对象,申请空间+调用构造函数初始化 

delete释放对象时,调用析构函数清理对象中资源,释放空间

 Problem:那么为什么C语言中已经有malloc/free,C++也可以用,但是还需要new/delete ?

1、针对内置类型用new还是malloc都是一样的

2、针对自定义类型, new还要调用构造函数完成初始化,delete还要调用析构函数完成清理

结论:C++中建议使用new/delete

operator new:该函数实际通过malloc来申请空间,当ma1loc申请空间成功时直接返回;申请空间失败,尝试执行空间不足应对措施,如果改应对措施用户设置了,则继续申请,否则抛异常。

operator new和operator delete: 

1.operator new和operator delete就是对malloc和free的封装

2.operator new中调用malloc申请内存,失败以后,改为抛异常处理错误,这样符合C++面向对象语言处理错误的方式

面试题:malloc/free和new/delete的区别?

总结:

1、new会调用构造函数,失败抛异常,malloc失败了返回0

2、malloc是一个函数,new是一个操作符

3、malloc用法:参数传字节数,返回值是void*, new后面跟申请对象的类型,返回值是类型的指针

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值