Just made a quick check on "effective c++" by Scott Meyers, citing item 16 below.
Item 16: Use the same form in corresponding uses of new and delete.
...
std::string *stringPtr1 = new std::string;
std::string *stringPtr2 = new std::string[100];
...
delete stringPtr1; // delete an object
delete [] stringPtr2; // delete an array of objects
...
What would happen if you didn't use the "[]" form on stringPtr2? Well, that's undefined too, but you can see how it would lead to too few destructors being called. Furthermore, it's undefined (and sometimes harmful) for built-in types like ints, too, even though such types lack destructors.
The rule is simple: if you use [] in a new expression, you must use [] in the corresponding delete expression. If you don't use [] in a new expression, don't use [] in the matching delete expression.
楼上那位号称 "基本数据类型 delete 和 delete[] 才是等价的",还表示 "在effect c++ 还是在 高质量C++中有详细讲解",看来你唯一地救星就只能在 "高质量C++" 了,如果该书真的持有这种观点,那也只能叫低质量 c++ 了。