如何避免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的多种释放方式,这么啰嗦,一定有其中的理由,我不清楚为什么...希望大牛们能说说自己的想法...

 

 

 

 

posted @ 2012-09-09 20:13  bizhu  阅读(4705)  评论(17编辑  收藏  举报