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)
没有。为此,您必须提供析构函数(但在复制结构时要小心,如果您没有正确实现或删除复制构造函数,您最终会得到 double delete)。
实际上,更好的想法是使用标准库容器而不是原始指针 - 因为它们提供自己的析构函数,所以它们会自动销毁(并且您不必担心复制的情况,因为它们实现了正确的复制语义)。
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |