假如我有一个结构数组,而这些结构又有动态分配的数组,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 **,结构和数组)是否会被破坏?
答案 0 :(得分:10)
没有
如果您想要更多自动内存管理,请使用矢量。
struct A {
string name;
vector<float> data;
vector<vector<int>> image;
}
答案 1 :(得分:4)
不。要做到这一点,你必须提供一个析构函数(但在复制结构时要小心,如果你没有正确实现或删除复制构造函数,你最终会得到双delete
S)。
实际上,更好的想法是使用标准库容器而不是原始指针 - 因为它们提供了自己的析构函数,它们会被自动销毁(并且在复制时你不必担心,因为它们实现了适当的复制语义)。
答案 2 :(得分:0)
除非您提供适当的析构函数,否则不会这样做。