如何避免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的多種釋放方式,這么啰嗦,一定有其中的理由,我不清楚為什么...希望大牛們能說說自己的想法...

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM