我有一個std::stack里面有一些指標:
std::stack<State*> m_states;
當我初始化我的程式時,我呼叫new將一個專案壓入堆疊(它必須是一個指標,因為我將使用多型型別)。
這是洗掉所有內容的正確方法嗎?
這是我呼叫 new(GameState和 MenuStates are classes inherited fromState`)的地方:
m_states.push(new GameState());
m_states.push(new MenuState());
這就是我在整個 App 類的解構式中所擁有的:
while (!m_states.empty())
{
delete m_states.top(); // (*)
m_states.pop();
}
我應該只呼叫 (*),還是我也需要呼叫pop()?
uj5u.com熱心網友回復:
我應該只呼叫 (*) 還是我也需要彈出?
好吧,如果您不在回圈中呼叫,那么pop()該while回圈將如何結束?換句話說,條件將如何!m_states.empty()變成false?
還有其他容器型別(如std::vector),您可以在其中運行每個成員,洗掉指向的物件,然后清除容器,但您不能對std::stack容器執行此操作。也就是說,[]堆疊沒有運算子——你只能訪問頂部元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361750.html
下一篇:fscanf列印替換字符
