簡體   English   中英

刪除指針數組及其對象的正確方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM