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

时间:2014-07-15 06:20:53

标签: c++ arrays memory-management struct

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

例如,考虑我有这种结构:

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 **,结构和数组)是否会被破坏?

3 个答案:

答案 0 :(得分:10)

没有

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

除非您提供适当的析构函数,否则不会这样做。