【发布时间】:2014-07-15 06:20:53
【问题描述】:
假设如果我有一个结构数组,其中又动态分配了数组,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**、结构和数组)都会被销毁吗?
【问题讨论】:
-
您应该使用类而不是结构并为此定义显式析构函数。
-
不,它不是递归的。此外,
A** array = new A[n];的*要么太多,要么太少。 @Ben 除了默认访问说明符之外,C++ 中的class和struct没有区别。 -
@T.C.当然,但这并不意味着不应该在这里使用一个类。它会更干净,如果要扩展为具有功能等,它可能会进入 header/cpp 文件集?似乎只使用一个类会更好。
-
@Ben 您也可以将所有功能等都放在
struct中。除了样式之外,没有理由将其用于另一个。 -
@Ben
class和struct之间的选择纯粹是风格或惯例。在语言层面上没有根本区别。您可以使用任何一种来表达完全相同的类型。
标签: c++ arrays memory-management struct