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