C ++删除包含新结构数组的新结构数组的正确方法?

时间:2013-01-27 00:49:46

标签: c++

删除包含新结构数组的新结构数组的正确方法是什么?

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;
};

或者

2 个答案:

答案 0 :(得分:1)

您必须手动删除嵌套数组。

但是,由于您使用的是C ++而忘记了数组,只需使用std::vector

typedef struct COW_STRUCTURE
{
    std::vector<CALF> calves;
} COW;

int main( void ) {
  std::vector<COW> cows;

为什么您不想使用能够以高效且安全的方式为您管理一切的东西?

正如旁边信息:

  • 类型名称通常不是全部大写(例如Cowcow,但很少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);

通过魔术,您不再需要删除任何内容。