zoukankan      html  css  js  c++  java
  • 如何避免delete和delete[]的尴尬?

             对于动态分配内存,C里使用malloc和free,C++里使用new和delete,这两个操作的主要区别在于new和delete能够自动调用类里的

    构造函数和析构函数.现在主要讲new出来的对象内存,释放内存使用delete的格式.

             学过C++的都知道,如果new一个单一的对象,如int * pInt = new int;释放时要使用delete pInt 格式,不能使用delete [] pInt;

    而对于new多个对象内存时,如 int *pV = new int[10];释放内存时要使用delete [] pV格式;不能使用delete pV;否则只会释放第一个

    int类型内存,无法释放后面9个;今天在Effective C++的条款16介绍了new和delete的使用,其中就有介绍了new int和new int[10]这两

    种方式的内存布局(大多数编译器都使用这样的内存布局)

              当分配一个对象内存时,仅仅分配一块对象类型的内存块,当分配对象数组内存时,会在内存中添加数组大小的标识n,表示分配了多

    少个内存块,所有释放对象数组内存使用delete时要加[]号;当我看到这内存分布格式时我想到的是为什么要分成两种分配方式??

              我设想如果分配单一的对象时也使用第二种内存分配格式,直接把n = 1就可以,然后不管分配单一对象还是分配对象数组,释放方式

    使用delete释放时统一不用[]号,直接检测n的大小然后释放内存,直接去掉第一种分布格式,这样就可以避免使用delete和delete[]时漏写或

    多写[]号出现的问题;

             但是这么多年C++还是保持着delete的多种释放方式,这么啰嗦,一定有其中的理由,我不清楚为什么...希望大牛们能说说自己的想法...

  • 相关阅读:
    代理模式
    适配器模式
    策略模式
    原型模式
    内存溢出
    jvm常用参数
    单例模式
    抽象工厂
    工厂方法模式
    选择器代码
  • 原文地址:https://www.cnblogs.com/bizhu/p/2677830.html
Copyright © 2011-2022 走看看