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動作。