从历史角度来看,C++2.0之前,对于一个对象数组的释放,给delete[]添加一个数组的维度是程序员的责任,比如
A* a = new A[10];
delete [10] a;
在C++2.1以及之后,这个[10]中的数字可以省略,这归功于compiler对于数组维度的自动计算。但在那个年代,compiler的这个计算会产生很大的性能开销。如果对于
A* a = new A;
A* aa = new A[10];
都使用
delete [] a;
delete [] aa;
在第一种情况下,这种开销是多余的。因此,折衷方案是:让程序员自己判断要释放的是object还是object array,从而自己决定添加[]。因此这被一直保留到现在的C++ standard中。
A* a = new A[10];
delete [10] a;
在C++2.1以及之后,这个[10]中的数字可以省略,这归功于compiler对于数组维度的自动计算。但在那个年代,compiler的这个计算会产生很大的性能开销。如果对于
A* a = new A;
A* aa = new A[10];
都使用
delete [] a;
delete [] aa;
在第一种情况下,这种开销是多余的。因此,折衷方案是:让程序员自己判断要释放的是object还是object array,从而自己决定添加[]。因此这被一直保留到现在的C++ standard中。