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;
}
}
是吗?
答案 0 :(得分:4)
您遍历Tile*
和delete
每个,然后delete[]
大的。{/ p>
for(int x=0; x<tileN; x++)
{
delete ppTile[x];
}
delete[] ppTile;
一个好的经验法则是每delete
个new
,delete[]
new[]
。
只需使用std::vector
智能指针即可避免麻烦。
根据您的修改:
我会避免支票if(ppTile)
。在NULL指针上调用delete
是明确定义的,但是检查也容易出错 - 如果指针是NULL
且mapSize*(mapSize-1)
不是0
,那么'你' d隐藏逻辑错误。