关于delete和delete[]的区别

在C++动态内存分配中我们常用到new和delete两种操作,new用来申请内存,delete用来释放内存。那么问题来了,我们应该用delete来释放内存还是用delete[]来释放内存呢?

为了得到答案我做了一下实验。(注:一下实验在使用delete和delete[]得到的结果是一样的,不重复po图)

 

 

关于delete和delete[]的区别

在这里,我先为list申请了内存空间,并且指定list[5] = 5;用于后面判断内存是否已经释放,事实证明内存确实释放了,其中存储的5已经被释放,而输出一个奇怪的数字。

但是我觉得不够严谨,于是

关于delete和delete[]的区别

我声明一个引用变量a来访问原来list[5]的地址,确保不是list的地址发生变化而导致list[5]的值发生了变化,事实证明内存确实释放了。

然后我发现了一个问题,那就是每次输出的那个奇怪的数字都是一样的,于是我想list[5]的地址是不是也没变?

关于delete和delete[]的区别

然后我猜测:delete只是释放了内存里面的东西,而list指向的地址并没有发生变化。

于是我又做了一个实验

关于delete和delete[]的区别

我的天,释放内存后居然还能赋值?!我自己都不相信了,于是我打开VS

关于delete和delete[]的区别

如图,我设置了三个断点,得到list在三个断点的地址分别为:

+ list 0x004fa2c0 {-842150451} int *

+ list 0x004fa2c0 {-842150451} int *

+ list 0x00008123 {???} int *

也就是说delete以后list实际上也不存在了,这是Dev编译器与VS编译器的差异

最后结论是delete以后内存释放了,指向的地址也变了,不能再对原来的变量赋值。

还有delete和new搭配着用最好,new[]搭配delete[],new搭配delete。(类对象数组一定要用delete[],基本数据类型两者均可,但最好搭配使用)

原文链接: https://www.cnblogs.com/zhuangshq/p/5119586.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    关于delete和delete[]的区别

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/227162

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午1:30
下一篇 2023年2月13日 下午1:30

相关推荐