在包含指向对象的指针的数组中释放内存的正确方法

Get*_*eto 1 c++ memory free pointers delete-operator

假设我有阵列:

Geometry* shapes[MAX_SIZE];
Run Code Online (Sandbox Code Playgroud)

然后我像这样填充数组:

for (int i = 0; i < MAX_SIZE; ++i)
{
    shapes[i] = new Geometry;
}
Run Code Online (Sandbox Code Playgroud)

delete [] shapes;完成工作或我必须循环遍历数组并逐个删除:

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

我想我必须单独循环和删除每个指针,因为delete []调用数组中对象的析构函数,这并不意味着将释放内存.但我需要更有经验的人的确认.

jua*_*nza 5

你有一个简单的指针数组.使每个指针指向动态分配的个体Geometry.所以你需要调用delete每个指针.delete []用于动态分配的数组.

在现实生活中,您将使用自动管理资源的类型,以避免必须手动删除指针.选项包括std::unique_ptr<Geometry>用于管理动态分配对象的数组或容器,例如boost::pointer_container库中可用的对象.