[英]What is the proper way to delete an array of pointers and their objects?
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;
}
}
那正確嗎?
您遍歷Tile*
並delete
每一個,然后delete[]
大的。
for(int x=0; x<tileN; x++)
{
delete ppTile[x];
}
delete[] ppTile;
一個好的經驗法則是每個new
都有一個delete
,每個new
delete[]
都有一個delete[]
new[]
。
您只需使用智能指針的std::vector
即可避免麻煩。
根據您的編輯:
我會避免檢查if(ppTile)
。 在NULL指針上調用delete
是明確定義的,但是檢查也容易出錯-如果該指針為NULL
並且mapSize*(mapSize-1)
不為0
,則您將隱藏邏輯錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.