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析构函数.