【C++知否】 malloc与new的区别

1 malloc与new的区别?

malloc、free是函数,标准库stdlib.h,但是new、delete是一种运算符,在使用上两者可以混着使用。但是两者有一个区别
比如下面这个,Test是自定义的一个类,它的构造函数要求传入两个值a和b,但是malloc无法传入。除非手动调用init()或set()之类的成员函数对a,b赋值。

Test *tp=(Test*)malloc(sizeof(Test));
tp->printT();

new可以在创建内存时可以传入a和b,如下:

Test *tp=new Test(10,20);

总结new在堆上初始化一个对象的时候,会触发对象的构造函数。而malloc不能。另外,free不能触发对象的析构函数,delete就可以。如下图:
如果是free,就只会将中间的堆,释放;
如果是delete,那么会在delete之前触发对象的析构函数,将右边的堆释放,然后再释放中间的堆。
因此,上面可以看出free会造成内存泄漏。

Alt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值