0
所以,我很好奇這件事我不明白。如何正確刪除std :: stack中的指針?
我創造了一些新的對象,並將它們傳遞給它們存儲在一個std ::棧的功能。
然而,當我要刪除他們 - 他們實際上沒有被刪除,因此,內存使用量將繼續攀升「永遠」用我的測試循環。
爲什麼?
bool StateMachine::changeState(BaseState *state) {
if (state == nullptr) {
delete states.top();
states.pop();
if (states.size() == 0) {
return false;
}
} else if (state != states.top()) {
states.push(state);
}
return true;
}
測試循環:
while (true) {
machine.changeState(new MenuState);
machine.changeState(nullptr);
}
使用一個std ::的unique_ptr而不是原始的作品,現在RAM使用是恆定的,但還是 - 我想知道。
乾杯!
您有未定義的行爲。如果你在一個空的'std :: stack'上調用'states.top()',你會得到未定義的行爲。 – Galik
在初始化期間堆棧被填充,所以它永遠不會是空的。應該可能提到這一點。 – ludolover
我在本地嘗試了一個稍微修改過的版本(以'int *'代替'BaseState *'+檢查空棧),在那裏我沒有泄漏內存(使用地址清理器運行)。 「BaseState」的析構函數可能沒有被聲明爲「虛擬」嗎? – Corristo