c/c++动态内存管理的区别


大家都知道C++中的new和delete和C语言中的malloc和free相比十分的便利,但是new和delete还有new[]和delete[]并不能混淆使用,若是混淆使用会产生严重的后果。


malloc()的作用是直接开辟一段空间,free(p)则是释放从p开始开辟的所有连续空间。这个使用方式十分简单,不用赘述。



而new和delete会检测开辟空间的类型从而开辟空间,而且会家按此开辟的空间是否含有自定义的构造或是析构函数,若有则会自主调用。而且在delete检测到自定义析构函数并且delete和new[]配对使用时会报错


new A[n]在检测到含有自定义的构造函数时会调用A的构造函数n次,在A含有自定义析构函数时则会多开辟四个字节在数组头部用于储存数组的大小,再返回该空间的第五个字节的地址。



delete []A在检测到含有自定义析构函数时,会向前四个字节取出开辟空间时存入的数字n,并且调用n次析构函数。然后释放所有空间。


动态内存管理的大概运作方式就是这样的,这只是很表面概括的总结,其中还有很多复杂的结构各自自行编程探讨。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值