C++ does delete[]deep删除C++;?
假设我有一个结构数组,而这些结构中又有动态分配的数组,delete[]deep会删除我上面提到的所有内容吗 例如,考虑到我有这样的结构:C++ does delete[]deep删除C++;?,c++,arrays,memory-management,struct,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; } for(inti=0;iNo 如果您
struct A
{
char* name;
float* data;
int** image;
};
在我的代码中我创建了一些地方
A** array = new A[n];
我为数组中的所有结构分配内存
for(int i=0; i<n; i++)
{
array[i] = new A;
}
for(inti=0;iNo
如果您想要更自动化的内存管理,请使用向量
struct A {
string name;
vector<float> data;
vector<vector<int>> image;
}
结构A{
字符串名;
矢量数据;
矢量图像;
}
否
如果您想要更自动化的内存管理,请使用向量
struct A {
string name;
vector<float> data;
vector<vector<int>> image;
}
结构A{
字符串名;
矢量数据;
矢量图像;
}
否。要实现这一点,您必须提供析构函数(但在这种情况下,复制结构时要小心,如果您没有正确实现或删除复制构造函数,则最终会导致双
删除
s)
实际上,更好的办法是使用标准库容器而不是原始指针——因为它们提供了自己的析构函数,它们会自动被销毁(在复制的情况下,您不必担心,因为它们实现了正确的复制语义)。不。要做到这一点,您必须提供析构函数(但在这种情况下,复制结构时要小心,如果没有正确实现或删除复制构造函数,则会导致双
delete
s)
实际上,更好的办法是使用标准库容器而不是原始指针——因为它们提供自己的析构函数,它们会自动被销毁(在复制的情况下,您不必担心,因为它们实现了正确的复制语义).除非您提供了相应的析构函数,否则不可以。除非您提供了相应的析构函数,否则不可以。您应该使用类而不是结构,并为此定义显式析构函数。不,它不是递归的。另外,
a**array=new a[n]“< /代码>要么太多,要么代码> */Cube >要么太少。@ Ben在C++中,代码< >类< /> >和<代码>结构> <代码>,而不是默认访问说明符。当然,这并不意味着这里不应该使用类。它将更干净,如果这要扩展到函数等,它可能会进入一个Head。r/cpp文件集?似乎只使用一个类会是一个更好的主意。@Ben和您可以将所有函数等同样地放在结构中。除了样式之外,没有理由使用它们。@Ben在类和结构之间的选择纯粹是样式或约定。没有根本的区别在语言级别上的nce。您可以使用其中一种来表示完全相同的类型。您应该使用类而不是结构,并为此定义显式析构函数。不,它不是递归的。此外,a**array=new a[n]“< /代码>要么太多,要么代码> */Cube >要么太少。@ Ben在C++中,代码< >类< /> >和<代码>结构> <代码>,而不是默认访问说明符。当然,这并不意味着这里不应该使用类。它将更干净,如果这要扩展到函数等,它可能会进入一个Head。r/cpp文件集?似乎只使用一个类会是一个更好的主意。@Ben和您可以将所有函数等同样地放在结构中。除了样式之外,没有理由使用它们。@Ben在类和结构之间的选择纯粹是样式或约定。没有根本的区别语言级别的nce。您可以使用其中任何一种来表示完全相同的类型。您应该将其设置为否、粗体和巨大,以获得戏剧性的效果!可能值得注意的是SmartPtr/shared\u ptr/auto\u ptr在这里,它们还提供了自动资源处理,同时仍然具有指针样式行为shared\u ptr不适用于C数组(除非您提供了一个定制的删除器,这会变得有点复杂)。您应该将其设置为否、粗体和巨大,以获得戏剧性的效果!这里可能值得注意的是SmartPtr/shared_ptr/auto_ptr,它们还提供了自动资源处理,同时仍然具有指针样式的行为shared_ptr不适用于C数组(除非您提供一个定制的删除器,这会变得有点复杂)。