在c++中,does delete[]深度删除一个结构

does delete[ ] deep deletes a structure in C++?

本文关键字:删除 结构 一个 深度 c++ does delete      更新时间:2023-10-16

假设我有一个结构数组,其中又动态分配数组,delete[]深度删除我上面说的所有内容吗?

例如,假设我有这样一个结构:
struct A
{
  char* name;
  float* data;
  int** image;
};

我在代码的某个地方创建了

A** array = new A[n];

,我为数组中的所有结构分配内存

for(int i=0; i<n; i++)
{
  array[i] = new A;
}

,然后在其他地方类似地填充结构体的内容(使用malloc/new创建名称,数据和图像)。

现在如果我说delete[] array;,到目前为止分配的所有内存(char*, float*, int**,结构和数组)都会被销毁吗?

No.

如果你想要更多的自动内存管理,使用vector

struct A {
   string name;
   vector<float> data;
   vector<vector<int>> image;
}

没有。要做到这一点,你必须提供一个析构函数(但在复制结构时要小心,如果你没有正确实现或删除复制构造函数,你最终会得到两个delete)。

实际上,一个更好的主意是使用标准库容器而不是原始指针——因为它们提供了自己的析构函数,它们被自动销毁(并且您不必担心发生复制,因为它们实现了正确的复制语义)。

除非提供合适的析构函数,否则不能。