Objective C++ 第3章16項
配列をnewで確保したときはdeleteではなくdeleteを使うこと。また配列でないものをdeleteで破棄しようしてはならない。
配列をtypedefして使っているときにはdelete[]を使うのを忘れないように注意が必要。
typedef float pos[3]; int main() { float* p = new pos; // new float[3]と同じ delete p; // 間違い delete[] p; }
本には例としてこのような感じのコードが載っていたが、私はあまりtypedefを使わないのでこういったコードは書かないだろう。
それにしてもなぜ言語仕様で対応しなかったのだろう。
newで確保したものが配列かそうでなくても、自動的に判定してdeleteで破棄できるようにすることは難しくないと思うのだが。実際、delete[]で破棄するときには確保したときの個数が分かる仕組みになっているのだし。