C++内存管理:new和malloc的区别

1.概念性质:

        new是C++新提出的一个概念,它是一个操作符,而malloc是C语言原本就有的一个分配空间函数。

2.使用效果

        1.对于编译器内置的类型(比如int,double等等),new和malloc的作用是一样的(new可以多进行一步初始化)

        对于上图的代码,p1虽然被分配了地址空间,但是置入的是一个随机值,而p2指针指向的空间则已经被初始化为10。

        2.对于用户自定义的数据类型(写的类),new可以调用类的构造函数,而malloc只能分配内存,new相当于malloc+构造函数。为了阐述这个我们先自定义一个类:

        当我们分别使用malloc和new来创建一个ListNode_Cpp对象的时候,就会产生不一样的效果。

        其中node的val,next以及prev指针都是随机值,而node4则调用了构造函数,next以及prev指针是空指针。

         对于new所具备的这些功能,我们可以从C++源码中看到一些痕迹,new和delete是通过operator new 和operator delete来实现的,这两个是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过 operator delete全局函数来释放空间,而operator new则是在调用malloc来实现的

        其中我们可以看到申请内存实际是调用了malloc函数,同时加了一个异常处理措施,如果内存申请失败,则抛出异常,而对于new来说,它实际是通过下列代码的结合来实现的。

        这两行的功能就等于ListNode_Cpp* p4 = new ListNode_Cpp(5);

        同理,delete也是一样的,只是释放内存不需要抛出异常(很少会有释放内存错误,除非少释放了空间)。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值