zoukankan      html  css  js  c++  java
  • 关于delete和delete[]的区别

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

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

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

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

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

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

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

    于是我又做了一个实验

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

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

    + list 0x004fa2c0 {-842150451} int *

    + list 0x004fa2c0 {-842150451} int *

    + list 0x00008123 {???} int *

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

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

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

  • 相关阅读:
    ES基本原理
    docker技术基础
    docker简介
    IaaS,PaaS和SaaS
    python的type和object
    django:一个RESTfull的接口从wsgi到函数的历程
    python的list内存分配算法
    10个我最喜欢问程序员的面试问题
    月薪三万的面试题
    深圳有趣网络笔试题面试题
  • 原文地址:https://www.cnblogs.com/zhuangshq/p/5119586.html
Copyright © 2011-2022 走看看