new和malloc对比

new和malloc的10点区别

  1. 初始化:new,delete会调用构造、析构函数,malloc,free只会开辟和释放空间;
  2. 分配内存的位置:new在自由存储区分配,malloc在堆上分配;自由存储区可以是堆,也可以是静态存储区,具体看new的实现(有些库调用malloc);
  3. 失败:new失败抛出bad_alloc异常,绝不会返回null;,malloc返回null指针;
  4. 指定大小:new根据类型自动计算内存大小,malloc需要用sizeof指定大小;
  5. 返回类型:new返回对象指针,malloc返回void*;
  6. 数组:new可以new A[10],malloc只能malloc(sizeof(A) * 10);
  7. 互相调用:new可以调用malloc,malloc不能调用new;
  8. 重载:new,delete可以重载,标准库本身就有8个重载;
  9. 内存重分配:malloc可以重新分配内存(如果申请的不够):使用ralloc,如果原地址后面有足够空间,直接扩大;如果后面空间不够,另外开辟空间,拷贝,然后释放原空间;
  10. 内存不足:内存不足分配时,new可以调用new_handler函数指针(错误处理函数),用户调用set_new_handler(new_handler p),指定错误处理函数。
    特征
    new/delete
    malloc/free
    分配内存的位置
    自由存储区
    分配成功的返回值
    完整类型指针
    void*
    分配失败的返回值
    抛出异常
    返回null
    分配内存大小
    由编译器计算
    显示指定
    处理数组
    有重载版本new[],delete[]
    用户计算大小
    已分配内存的扩充
    无法直接处理
    用ralloc处理
    是否互相调用
    可以调用malloc,具体看实现
    不能调用new
    内存不足
    指定处理函数或者重载分配器
    无法自己处理
    重载
    允许
    不允许
    构造与析构
    调用
    不调用
    原文:https://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值