在c++中,does delete[]深度删除一个结构
does delete[ ] deep deletes a structure in C++?
假设我有一个结构数组,其中又动态分配数组,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**,结构和数组)都会被销毁吗?
No.
如果你想要更多的自动内存管理,使用vector
struct A {
string name;
vector<float> data;
vector<vector<int>> image;
}
没有。要做到这一点,你必须提供一个析构函数(但在复制结构时要小心,如果你没有正确实现或删除复制构造函数,你最终会得到两个delete
)。
实际上,一个更好的主意是使用标准库容器而不是原始指针——因为它们提供了自己的析构函数,它们被自动销毁(并且您不必担心发生复制,因为它们实现了正确的复制语义)。
除非提供合适的析构函数,否则不能。
相关文章:
- 如何在cpp中删除(免费)多维结构内存?
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 从向量中删除结构,解构它
- shared_ptr删除结构内的对象
- 如何从 STL 列表中删除结构记录
- 程序在删除结构中的指针数组时崩溃
- 删除C结构末尾填充的最佳做法是什么
- 如何安全地删除结构
- 如何在不知道其类型的情况下删除结构
- 删除结构的成员,并将其重新制作为其他内容的副本,而不使用 new
- 删除结构的指针是否也会删除结构中的指针?
- 从C++中的二进制文件中删除结构
- 删除结构c++的向量中的重复项
- 删除结构数组,更改结构地址
- 在c++中从文件中删除结构
- 使用delete运算符删除结构中的元素
- VS 2010 C++在删除结构数组时崩溃
- 如何删除结构数组的元素
- 需要删除动态结构内容,然后删除结构本身
- 使用迭代器从STL列表中删除c++结构