new和malloc的区别详细总结

  malloc是C中的函数,需要声明特定的头文件。而new是C++中的关键字(操作符),它本身不是函数,所以不依赖于头文件,C++译器就可以把new编译成目标代码.

1、申请内存所在位置不同
  new操作符从自由存储区分配内存空间,而malloc函数从上分配内存,自由存储区不同于堆,但是都需要手动释放,我们可以忽略这一点.

2、申请方式不同
  new操作符申请内存是按照对象申请,会进行调用对象的构造函数。而malloc则需要显式地指出所需内存的尺寸,并没有调用对象的构造函数。

3、返回值不同
  new返回的是申请对象类型的指针,malloc返回的是指向那块内存的(void*)类型的指针,一般进行类型转换。

4、分配失败时
  new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL

5、重载
  C++允许重载new/delete操作符,特别的,布局new的就不需要为对象分配内存,而是指定了一个地址作为内存起始区域,new在这段内存上为对象调用构造函数完成初始化工作,并返回此地址。而malloc不允许重载

6、释放方式不同
  delete会调用对象的析构函数,而free只是释放空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值