我的遊戲的主循環是這樣的:如何在不同的std :: vector中刪除相同的指針?
std::vector<std::unique_ptr<State>> states;
for(size_t i = 0; i < states.size(); i++)
{
states[i]->Update();
states[i]->Draw();
}
他們與這雖然一大敗筆。迭代過程中我不能修改矢量(刪除狀態),因爲如果我刪除了當前狀態的迭代是那麼它顯然打破了,因爲沒有國家調用更新和借鑑。所以,我認爲這將是一個好主意,以應添加到states
矢量狀態的載體,並應刪除的states
矢量狀態的載體。然後在循環結束後修改向量,並且在迭代過程中不會出現任何問題。
std::vector<std::unique_ptr<State>> states;
std::vector<std::unique_ptr<State>> statesToBeAdded;
std::vector<std::unique_ptr<State>> statesToBeRemoved;
for(size_t i = 0; i < states.size(); i++)
{
states[i]->Update();
states[i]->Draw();
}
for(size_t i = 0; i < statesToBeAdded.size(); i++)
{
states.push_back(std::move(statesToBeAdded[i]));
}
statesToBeAdded.clear();
for(size_t i = 0; i < statesToBeRemoved.size(); i++)
{
states.erase(std::remove(states.begin(), states.end(), statesToBeRemoved[i]), states.end());
}
statesToBeRemoved.clear(); //error is thrown here
我不能從states
矢量刪除狀態,雖然,錯誤被扔在statesToBeRemoved.clear()
行,我想這是因爲當我打電話的states.erase(...)
線就從states
載體,它因此勾銷了刪除元素statesToBeRemoved
向量中的相同元素,因爲該元素指向不再存在的對象。
你不能只刪除一個std ::的unique_ptr不會破壞什麼指針指向,所以我不認爲有一種方式來刪除從states
矢量元素,而不在statesToBeRemoved
矢量抵消的元素。那麼如何解決這個問題呢?
謝謝。
呃......它被稱爲**獨特的**指針。你不應該有兩個指向相同的東西,**有史以來**。確定你的所有權語義應該是什麼,並相應地改變你的指針類型。 – us2012 2013-02-20 23:49:20
它看起來像'statesToBeAdded'和'statesToBeRemoved'應該只包含'州*'和'states'應該有'unique_ptr'實例(因爲所有權)。 – 2013-02-20 23:51:02
顯示「State」的定義。最好的,展示一個完整的小程序來展示問題。 – 2013-02-21 00:03:23