Effective C++讀書筆記之十六:成對使用new和delete時要採取相同形式

Item 16:Use the same form in corresponding uses of new and delete

當你使用new(也就是用過new動態生成一個對象),有兩件事發生。第一,內存被分配出來。第二,針對此內存會有一個(或更多)析構函數被調用。當你使用delete,也有兩件事發生:針對此內存會有一個(或更多)析構函數被調用,然後內存才釋放。delete的最大問題在於:即將被刪除的內存之內究竟存有多少對象?

其實遊戲規則很簡單:如果你調用new時使用[ ],你必須在對應調用delete時也使用[  ]。如果你調用new時沒有使用[  ],那麼也不該在對應調用delete時使用[ ].

這個規則對於喜歡使用typedef的人也很重要,因爲它意味typedef的作者必須說清楚,當程序員以new創建該種typedef類型對象時,該以哪一種delete形式刪除之,考慮下面這個typedef:

typedef std::string AddressLines[4];

由於AddressLines是個數組,如果這樣使用new:

std::string* pal = new AddressLines   //注意,“new AddressLines”返回一個string*,就像“new string[4]一樣”

那就必須匹配“數組形式”的delete:

delete [ ] pal;

爲避免諸如此類的錯誤,最好儘量不要對數組形式做typedef動作。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章