删除包含新结构数组的新结构数组的正确方法是什么?
typedef struct CALF_STRUCTURE
{
char* Name;
bool IsBullCalf;
} CALF;
typedef struct COW_STRUCTURE
{
CALF* Calves;
} COW;
int main( void )
{
COW* Cows;
Cows = new COW[ 3 ]; // There are 3 cows.
Cows[ 0 ].Calves = new CALF[ 2 ]; // The 1st cow has 2 calves.
Cows[ 1 ].Calves = new CALF[ 1 ]; // The 2nd cow has only 1 calf.
Cows[ 2 ].Calves = new CALF[ 25 ]; // The 3rd cow has 25 calves. Holy cow!
Cows[ 2 ].Calves[ 0 ].Name = "Bob"; // The 3rd cow's 1st calf name is Bob.
// Do more stuff...
现在,是时候清理了!但是......删除牛和牛犊数组或任何类型的结构数组的正确方法是什么?
我应该首先在for循环中删除所有牛的calves数组吗?像这样:
// First, delete all calf struct array (cows[x].calves)
for( ::UINT CowIndex = 0; CowIndex != 3; CowIndex ++ )
delete [ ] Cows[ CowIndex ].Calves;
// Lastly, delete the cow struct array (cows)
delete [ ] Cows;
return 0;
};
或者我应该只是删除cows数组并希望它也会删除所有的calves数组?像这样:
// Done, lets clean-up
delete [ ] Cows;
return 0;
};
或者
答案 0 :(得分:1)
您必须手动删除嵌套数组。
但是,由于您使用的是C ++而忘记了数组,只需使用std::vector
:
typedef struct COW_STRUCTURE
{
std::vector<CALF> calves;
} COW;
int main( void ) {
std::vector<COW> cows;
为什么您不想使用能够以高效且安全的方式为您管理一切的东西?
正如旁边信息:
Cow
或cow
,但很少COW
),大写是常量calves
不是Calves
)答案 1 :(得分:1)
都不是。要在C ++中执行此操作:
struct CALF
{
std::string Name;
bool IsBullCalf;
};
和
struct COW
{
std::vector<CALF> Calves;
};
和main
:
std::vector<COW> Cows(3);
通过魔术,您不再需要删除任何内容。