malloc和new的区别及联系

本文对比了C++中的malloc和new在用法和底层原理上的异同,指出new是malloc的封装,包含了构造函数和析构函数,而operatornew和operatordelete则分别对应malloc和free,提供异常处理机制。
摘要由CSDN通过智能技术生成

一.区别

1.用法上

  1. malloc是一个函数,而new是C++一个操作符
  2. malloc需要手动计算开辟的空间大小,new后面只需跟上空间的类型,如果有多个对象,加上[]给个数即可
  3. malloc申请的空间不能初始化,而new可以
  4. malloc返回void*,需要强制类型转换,而new返回对应类型的指针
  5. malloc失败会返回空指针,需要手动检查;new失败抛出异常,要用catch捕获

2.底层原理上

申请自定义类型对象时,malloc只会开辟空间,而new会先开辟空间,再去调用对象的构造函数完成初始化;delete会先调用对象的析构函数,再释放空间

二.联系

new是malloc的封装,delete是free的封装

对于自定义类型

new完成了两件事

  1. 开辟空间
  2. 调用构造函数

delete也同样:

  1. 调用析构函数
  2. 释放空间

new由两部分组成:operator new函数和构造函数

delete由两部分组成:operator delete函数和析构函数

其中operator new和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。

有了malloc,为什么还要写一个operator new函数呢?事实上,operator new和malloc的用法和功能一模一样,也是手动计算空间大小,返回值需要强制类型转换。但是如果开辟空间失败,它会抛出异常。所以设计operator new的意义就是能抛出异常。

为了和operator new对称,所以又设计了一个operator delete,它其实也是封装了free函数。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值