2013-07-29 78 views
1

有沒有一種方法可以在不使用關鍵字new的情況下實現?我可以在不使用新關鍵字的情況下執行此操作嗎? C++

void World::generateChunk(Coordinate coord) { 
    if(loadedChunks[coord]) 
     delete loadedChunks[coord]; 
    loadedChunks[coord] = new Chunk(coord); 
    loadedChunks[coord]->generate(); 
} 

loadedChunks是std::map<Coordinate, Chunk*>

+3

沒有定義什麼'loadedChunks'是這個問題無法回答。 –

+0

我在你問之前補充說。 :P @DavidRodríguez-dribeas –

+1

'* loadedChunks [coord] =塊(coord);''可以工作,如果'塊'是可複製的。 – Casey

回答

3

是,通過使用:

std::map<Coordinate, Chunk> 

世界:: generateChunk()將其成爲:

void World::generateChunk(Coordinate coord) 
{ 
    loadedChunks[coord] = Chunk(coord); 
    loadedChunks[coord].generate(); 
} 

要意識到這一點的含義。自從現有對象被分配以來,不再有析構函數調用。多態性不再起作用(您將無法在loadedChunks中存儲Chunk子類。)此外,至少loadedChunks.size()對象將始終存在;它們不可刪除。

Chunk還必須符合標準容器類的標準,例如可複製構建,可賦值等。並確保這些操作正常工作(例如,您需要確定是否需要深度複製或淺度複製)

+0

......通過編寫一個合適的構造函數,我們可以擺脫可怕的,可怕的「生成」方法(爲什麼這很可怕?因爲它在做構造函數的工作!)。小錯字:用'.'替換' - >'。 –

+0

@KonradRudolph不一定會生成所有的塊。 –

+0

@Binero它們只會在引用時在地圖中創建。 – IdeaHat

相關問題