New和malloc区别

  1. new/delete是C++关键字, malloc/free是库函数
  2. new以具体的类型为单位进行内存分配, malloc需要显式的指出所需内存的字节数
  3. 返回类型,new操作符成功时,返回对象类型的指针,无需进行类型转换; malloc操作成功时,返回void* 需要进行强制类型转换
  4. 分配失败。 new分配失败会抛出bac_alloc异常, malloc分配失败时返回null
  5. 构造析构函数。 new能出发构造函数,delete触发析构函数,先销毁对象再释放内存空间; malloc仅分配需要的内存空间, free仅归还分配的内存空间, 无法完成类对象的构造和析构工作
  6. 允许重载new/delete操作符, malloc不允许重载
  7. new操作符从自由存储区为对象分配内存空间,malloc从堆上动态分配内存。自由存储区时c++ 基于new的一个抽象概念。通过new进行内存申请,该内存即为自由存储区。 堆是由操作系统维护的一块特殊内存。自由存储区不等于堆,因为自由存储区可以不位于堆中
  8. 混用会怎么样?
    1. new申请,free释放: 内存泄漏。 因为free不会触发析构函数,不会释放构造函数申请的空间,导致内存泄漏
    2. malloc申请,delete释放: 摧毁不存在的对象。 malloc并没用调用构造函数创建对象。
  9. 如果使用中发现内存不够时候,malloc可以通过realloc 重新扩展内存, new不支持重新扩展内存
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃肉夹馍不要夹馍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值