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

是对的吗?

4

1 回答 1

4

您遍历Tile*s 和delete每个,然后delete[]是大的。

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

一个好的经验法则是有一个deletefor eachnew和一个delete[]for each new[]

您可以通过使用std::vector智能指针来避免麻烦。

根据您的编辑:

我会避免检查if(ppTile)。调用deleteNULL 指针是明确定义的,但检查也容易出错 - 如果该指针 isNULLmapSize*(mapSize-1)is not 0,您将隐藏一个逻辑错误。

于 2013-04-04T21:47:35.493 回答