new 和 malloc的区别

new是C++中新引入的关键字下面简单介绍一下他们两个的区别

d751836de47e4067ab91802c003d3b8d.png

 首先看一下他们对于内置类型的区别,他们对于内置类型来说几乎只有在用法上的区别,我们可以看一下调试

dc5a44ac6f584c0d8fa59ce9d2fc7c7e.png

 这就是用new和malloc对内置类型开辟动态空间,我们基本看不出差别,那我们看一下他们对于内置类型适当有什么区别

404002fa1a5849b48ba9740d06364a10.png

 当然对于malloc来说对应的释放是free,而对于new对应的则是delete,而delete释放一个值得时候不需要带方括号,而释放数组时需要带方括号,而且两个最好不要混着用,下面看一下他们对于内置类型释放的区别

e30a3ea4a4c440078aef3b2a3ad6b516.png

 同样是几乎没有差别

而他们对于内置类型几乎没有差别,但是他们对于自定义函数,则会有不同

e7630514c4884c81b5550e2e18336306.png

 首先看一下我们的自定义类型

这时候我们分别用malloc和new对内置类型开辟空间,我们看一下差别

dfd053028235499583ca4361cd9206ff.png

 同样是分别开辟一个和开辟五个

acdd91ec0e654e02b5694dce024bc9d7.png

 我们调试过以后可以明显看到,new和malloc开辟空间后,new出来的空间明显被初始化后的,因为new开辟自定义空间会调用自定义函数的默认构造函数,而malloc则不会调用

下面看一下释放空间

5b6a5a7fb57d4b98a28c230913e0f5a1.png

 b1767afdeddf45099f5806e949bcbc63.png

 在这里我们确实看不出什么,但是delete会调用自定义函数的默认析构函数,我们可以看一下14439d9b37ca44d8bc6d7f87bdb5aeff.png

 这是我通过自己实现默认构造函数,通过打印出来显示的

这就是他们初始化的区别,我们在看一下关于new的初始化

e86028bb62c94e85b52de905f6c0c12f.png

 关于new的初始化,只开辟一个空间的话,可以用园括号开初始化里面的值,但是开辟数组的话,在C++98里面是不支持new数组的初始化的,但是在C++11里面支持上面显示的初始化

2a55b9b78b9d402a934682b7795cfae8.png

 我们可以看到初始化后的值

这个就是new和malloc的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naxx Crazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值