delete []深层删除C++中的结构?

Viv*_*V K 1 c++ arrays struct memory-management

假设我有一个结构数组,而这些结构又有动态分配的数组,delete [] deep会删除我上面说的所有内容吗?

例如,考虑我有这样的结构:

struct A
{
  char* name;
  float* data;
  int** image;
};
Run Code Online (Sandbox Code Playgroud)

我创建的代码中的某个位置

A** array = new A[n];
Run Code Online (Sandbox Code Playgroud)

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

for(int i=0; i<n; i++)
{
  array[i] = new A;
}
Run Code Online (Sandbox Code Playgroud)

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

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

pdw*_*pdw 10

没有.

如果您想要更多自动内存管理,请使用向量.

struct A {
   string name;
   vector<float> data;
   vector<vector<int>> image;
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该做出那个没有,大胆而巨大的戏剧效果! (3认同)

Mat*_*lia 5

没有。为此,您必须提供析构函数(但在复制结构时要小心,如果您没有正确实现或删除复制构造函数,您最终会得到 double delete)。

实际上,更好的想法是使用标准库容器而不是原始指针 - 因为它们提供自己的析构函数,所以它们会自动销毁(并且您不必担心复制的情况,因为它们实现了正确的复制语义)。