可能重复:
How does delete[] know it's an array? (C++)
How does delete[] “know” the size of the operand array?C++数组和动态存储器
假设我们有下面的类的100种元素的
class Data
{
public:
Data() : i(new int) { *i = 0; }
~Data() { delete i; }
private:
int *i;
};
现在我们创建阵列键入数据
Data* dataArray = new Data[100];
我们知道,运营商新将调用数据构造为100个对象,因为它知道多少对象创建的,现在让我们删除这个数组,如果说delete dataArray
为第一对象的析构函数只会被调用,即使我们知道我们释放的100个对象的内存会导致内存泄漏,因为它们被分配为一个块,但是如果我们说delete[] dataArray
将会调用100个对象的析构函数,但这是一个动物记忆, t指定了那里有多少对象,并且据我所知,阵列没有开销来知道它中有多少对象,那么运行时环境如何知道在释放内存之前要破坏的对象的数量?
分配器在分配的块上添加了一些神奇的数字,它告诉有多少元素 - 实际的实现取决于编译器 – stijn
哇,问题名称中的方括号很糟糕。 – mkb
http://stackoverflow.com/questions/197675/how-does-delete-know-the-size-of-the-operand-array < - 这可能是一个更好的候选人的重复通知 – bdonlan