new 和malloc的区别

本文详细对比了new与malloc这两种内存分配方式的不同之处,包括它们在内存分配位置、返回类型的安全性、内存分配失败的处理方式、构造与析构函数的调用情况、内存大小的指定方式、内存重新分配的方法以及是否可以被重装等方面的具体差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理了new和malloc的几点区别,记下来以防忘记。
1.申请的内存所在位置
   new操作符从自由存储区上位对象动态分配内存空间,而malloc函数则从堆上动态分配内存。
2.返回类型安全性
  new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无需类型转换。malloc内存分配成功则是返回void*类型。
3.内存返回失败返回值
  new内存分配失败时,抛出bad_alloc异常,不会返回NULL;malloc分配内存失败时返回NULL。
  C语言中判断内存是否分配成功:
  int *a = (int *)malloc(sizeof(int)); if(NULL == a) {}
  C++中采用上述判断则无意义,因为在程序执行到if语句,则代表内存分配成功。判断内存分配是否成功的语句如下:
  try { int *a = new int[];} catch(bad_alloc) { }
4.是否调用构造析构函数
  new需要,malloc则不需要
5.分配内存大小
  new由编译器根据类型计算得出,malloc则必须显式指定内存大小
5.相互调用
  new可以调用malloc,malloc不用调用new
6.重新分配内存
  malloc可以通过realloc函数进行内存的重新分配,而new则不可
7.是否可以被重装
  new可以,malloc不可以
8.C++提供了new[]与delete[]处理数组类型,malloc则无


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值