new和malloc的区别

 


参考原文:https://www.cnblogs.com/ywliao/articles/8116622.html 这篇写的超级好


 

a) 申请内存的位置

  • new:自由存储区   ---delete释放内存
  • malloc:堆    ---free释放内存

b) 返回类型

  • new:内存分配成功,返回对象类型的指针,无需进行类型转换
  • malloc:内存分配成功,返回void*,需要强制转换将void*类型指针转换为所需类型。

如: int *arr=new int[n];/ delete[] arr;   ///n已知

     int *a=(int *)malloc(n*sizeof(int)); /free(a)//定义动态数组 相当于int a[n]

c) 内存分配失败的返回值

  • new:抛出bac_alloc异常,不会返回null
  • malloc:返回null;

判断语句:

  • new: try/catch

  try

     {int *a=new int();}

catch(bad_alloc)

     {…}

  • malloc: if/else

       if(null==a)

              {…}

       else

              {…}

d) 初始化时是否需要指定内存大小

  • new:不需要,编译器会根据类型自行计算出类型*数目=内存大小
  • malloc:需要,需要显示的指出所需内存的尺寸,即(sizeof(type)) or (sizeof(type)*num)

e) 是否调用构造函数/析构函数

  • new:会;使用new时后调用构造函数进行内存分配,使用delete调用对象的析构函数释放内存。
  • malloc:不会

f) 是否可以互相调用

  • new:实现可以基于malloc
  • malloc:实现不可以调用new

g) 是否可以被重载

  • new/delete: 可以被重载,标准库定义了4对重载版本
  • malloc/free: 不允许被重载

h) 使用中内存扩充

  • new:不支持
  • malloc:如果使用中发现内存不足,可以使用realloc函数进行扩充
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值