我刚开始学习 C/C++,有人告诉我使用 delete 删除单个对象并将 delete [] 用于数组。
然后我发现这个网站问这个问题
这段代码有什么问题吗?
T *p = new T[10]; delete p;
注意:不正确的回复:“不,一切都正确”、“只会删除数组的第一个元素”、“将删除整个数组,但只会调用第一个元素的析构函数”。
这就提出了一个问题,该代码块中发生了什么?从逻辑上讲,我会认为这是“仅删除数组的第一个元素”,但似乎不是。有人可以对此有所了解吗?
我刚开始学习 C/C++,有人告诉我使用 delete 删除单个对象并将 delete [] 用于数组。
然后我发现这个网站问这个问题
这段代码有什么问题吗?
T *p = new T[10]; delete p;
注意:不正确的回复:“不,一切都正确”、“只会删除数组的第一个元素”、“将删除整个数组,但只会调用第一个元素的析构函数”。
这就提出了一个问题,该代码块中发生了什么?从逻辑上讲,我会认为这是“仅删除数组的第一个元素”,但似乎不是。有人可以对此有所了解吗?
delete:这将释放当前由执行删除的指针分配的内存。它只删除第一个变量指向的内存。
delete []:这会释放为整个数组分配的内存。一个数组由几个变量组成 - delete 释放仅分配给第一个变量的内存,而 delete [] 完成整个事情。
考虑它的一个好方法是将 delete 视为指令,而将 delete [] 视为循环;其中数组循环并在数组中的每个变量上单独调用删除。这不是它在现实中的工作方式(实际工作方式要复杂一些),但这是理解差异的好方法。
对所有对象调用析构函数,因为在某些情况下,例如在包含指针的对象数组的情况下,仅对第一个元素调用析构函数不会释放所有内存。