我想知道为什么这段代码不起作用:
void KeyValueList::Release()
{
//(m_ppKeyValueList is a dynamic array of pointers to objects on the heap)
if (m_ppKeyValueList) {
for (int i = 0; i < m_iCapacity; ++i) {
if (m_ppKeyValueList[i]) {
delete m_ppKeyValueList[i];
}
}
/*delete[] m_ppKeyValueList;*/
for (int i = 0; i < m_iCapacity; ++i) {
delete (m_ppKeyValueList + i);
}
}
}
为什么我们不能通过这种方式迭代动态数组并删除
它?
最佳答案
动态数组不仅仅是一系列元素。它还包含有关数组大小的信息。此外,分配器只知道一个内存块。因此,就像任何动态内存一样,您只能释放您分配的内容,而不是它的较小子集。
这就是为什么该语言要求您仅在从 new[]
表达式获得的指针上调用 delete[]
,而那是唯一 释放内存的方法。
关于c++ - 为什么在动态数组上以特定方式调用 'delete' 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7576554/