new和malloc的区别-创新互联

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

永安ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

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的区别

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:new和malloc的区别-创新互联
本文链接:http://pwwzsj.com/article/dopjhi.html