【发布时间】:2011-07-13 18:26:40
【问题描述】:
可能重复:
How does delete[] know it's an array? (C++)
How does delete[] “know” the size of the operand array?
假设我们有以下类
class Data
{
public:
Data() : i(new int) { *i = 0; }
~Data() { delete i; }
private:
int *i;
};
现在我们创建包含 100 个数据类型元素的数组
Data* dataArray = new Data[100];
我们知道 operator new 将为 100 个对象调用 Data 构造函数,因为它知道创建了多少个对象,现在让我们删除这个数组,如果我们说 delete dataArray 将只调用第一个对象的析构函数,即使我们知道我们被释放的 100 个对象的内存 - 将导致内存泄漏 - 因为它们被分配为一个块,但如果我们说 delete[] dataArray 将调用 100 个对象的析构函数,但这是一个动态内存,我没有t 指定其中有多少对象,据我所知,数组没有开销来知道其中有多少对象,那么运行时环境如何知道在释放内存之前要销毁的对象数量?
【问题讨论】:
-
分配器在分配的块上添加一些幻数,告诉有多少元素 - 实际实现取决于编译器
-
哇,问题名称中的括号弄错了。
标签: c++ delete-operator