如何避免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]这两

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

如何避免delete和delete[]的尴尬?

 

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

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

 

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

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

多写[]号出现的问题;

 

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

 

 

 

 

原文链接: https://www.cnblogs.com/bizhu/archive/2012/09/09/2677830.html

欢迎关注

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

    如何避免delete和delete[]的尴尬?

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

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

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

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

(0)
上一篇 2023年2月9日 上午10:21
下一篇 2023年2月9日 上午10:21

相关推荐