C++ malloc free与new delete

之前面试的时候面试官问了我一个问题,是C语言中有了malloc和free为什么还要再有new 和delete。说一下这两者的区别。
其实之前也有看过这个东西,包括malloc free是C语言的库函数,而new和delete是C++的操作符。malloc开辟出的是一片空间,返回的是一个void *的指针,用的时候必须强制转换。而new直接返回的就是该类型的指针。但是这些都不是最为重点的。
最为关键的就是对于非内部数据类型的对象也就是自定义的类型而言,这两者的区别是最大的。光用malloc free无法满足动态对象的要求。
对象在创建的同时要执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc free是库函数不是操作符,不在编译器控制权限之内,无法把构造函数和析构函数任务强加给malloc和free。
因此 C++语言有了new 和 delete来完成动态内存分配和初始化的工作。对了,malloc和free还不能为动态对象初始化,要想初始化必须给类再写一个初始化void Initialize();的函数。
最后,为什么C++不淘汰掉malloc和free呢,这个很简单,因为它还要调用C的函数啥的,兼容一下下。delete可以释放malloc的内存,但不建议这么做,free不能释放new的内存,因为它无法执行析构函数,编译会出错。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值