删除运算符和数组?

Mik*_*e55 6 c++ arrays memory-management

我有abstract Base班级和Derived班级.

int main ()
{
  Base *arrayPtr[3];

  for (int i = 0; i < 3; i++)
  {
    arrayPtr[i] = new Derived();
  }

  //some functions here

  delete[] arrayPtr;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用删除操作符.如果我删除了如上所示的基类指针数组,那么这会调用派生类对象的析构函数并清理内存吗?

fre*_*tje 10

不,您必须明确删除数组中的每个项目:

for (int i = 0; i < 3; ++i)
{
    delete arrayPtr[i];
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*osz 10

您必须遍历数组中的delete每个元素.如果已使用动态分配,则调用delete []该数组new[].

在示例代码中,数组在堆栈上分配,因此您不能对其进行调用delete [].

还要确保你的Base类有一个virtual析构函数.

参考:什么时候我的析构函数应该是virtual.

  • 不需要在数组上调用delete [],是不是'newed'. (7认同)