删除指针数组及其对象的正确方法是什么?

时间:2013-04-04 21:45:51

标签: c++ arrays pointers dynamic

ppTile = new Tile*[tileN];
    for(int x=0; x<tileN; x++)
    {
        ppTile[x] = new Tile(Tile::TileType(pCData->GetdefaultTile()),
                            ((x*2)+1) % (mapSize+(mapSize-1)),
                            ( x/ ((float)mapSize-0.5) )+1,
                            pCData->GetdefaultHeight()
                            );
    }

如何删除Tile *数组和Tile对象?

编辑:这是我的猜测:

Map::~Map()
{
    if(ppTile)
    {
        for(int x=0; x<mapSize*(mapSize-1); x++)
        {
            delete ppTile[x];
        }
        delete[] ppTile;
    }
}

是吗?

1 个答案:

答案 0 :(得分:4)

您遍历Tile*delete每个,然后delete[]大的。{/ p>

for(int x=0; x<tileN; x++)
{
    delete ppTile[x];
}
delete[] ppTile;

一个好的经验法则是每deletenewdelete[] new[]

只需使用std::vector智能指针即可避免麻烦。

根据您的修改:

我会避免支票if(ppTile)。在NULL指针上调用delete是明确定义的,但是检查也容易出错 - 如果指针是NULLmapSize*(mapSize-1)不是0,那么'你' d隐藏逻辑错误。