2009-10-11 52 views
2

我正在寫一個遊戲的狀態管理器。我已經掌握了大部分邏輯,我想如何做到這一點。 我想狀態,這將是類,在StateManager類中的堆棧中處理。每個狀態都有暫停功能,堆棧將是一個STL堆棧。我可以使用該類中的函數刪除動態分配的類嗎?

當一個狀態完成了它需要做的事情(例如:從暫停屏幕,用戶點擊「返回遊戲」)它需要從堆棧中刪除並刪除。我目前的邏輯(我不能測試,不幸)是這樣的:

State完成它的工作。 在其更新函數中,當它發現它已完成時,它將調用一個函數來清理狀態。 該函數將處理需要綁定的任何即時鬆散結束(如果有的話),從狀態管理器堆棧中調用彈出功能,並刪除它自己。

我問的是:我可以從它自己內部刪除一個類嗎?

回答

0

你可以的話,甚至可以撥打:

delete this; 

但它是一種毛茸茸的和醜陋的,可能也是危險......

相關:

+0

那麼,有沒有更好的方法?我的第二個想法是有一個「is_done」變量或狀態管理器會檢查每個週期並彈出和刪除「已完成」的狀態。我不知道會是怎樣的資源密集型。 – sonicbhoc 2009-10-11 22:22:32

+0

你可能有類似於Qt的QObject :: deleteLater()方法......它將對象添加到列表中,並且在稍後的某個點(例如在下一次循環的事件循環開始時)遍歷列表並刪除一切都在裏面。在對象中設置in_delete_laterlist標誌也是一個好主意,並且使用deleteLater()檢查該標誌,這樣如果deleteLater()不止一次在對象上調用,它將不會被添加到列表兩次並刪除兩次。 – 2009-10-12 02:25:22

0

肯定的:

void cleanup(){ 
delete this; 
} 

當然也有很多事情,你需要確保的(而不是其中最重要的是,你將有壞,如果你嘗試這樣做,同時創建一個實例在堆棧上。

0

是 - delete this;有效。只要確保這是與在執行刪除的函數中完成的類相關的最後一件事。

相關問題