2011-11-21 56 views
1

在我的遊戲中,有很多Foo類的對象互相交互。類Foo的靜態方法使用容器更新所有對象,以便跟蹤創建的對象。任何時候都可能死於多個對象的對象

我的問題是,一個Foo對象可能會殺死另一個對象,Foo的其他實例不知道這個可怕的事件,他們可以使用死對象(刪除),從而給出一個錯誤。

我有一些想法,以避免指針刪除的對象,但我不認爲他們是合適的。

1)一類智能指針的用於檢查空對象。

大概這是糟糕的想法,我也沒看不出任何地方這樣的事情。我可以創建一個指針,當調用delete時,刪除指向的Foo對象,然後在轉換爲Boolean時給出false(所以可以知道是否可以調用它的方法)。

2)每個Foo對象不與一個指針,但與ID跟蹤其他對象。

然後對象通過Foo類的靜態方法獲取指向另一個Foo對象的指針(正如我所說的Foo類有一個跟蹤所有實例的容器)。 它也可以在多線程環境中進行簡單的修改,但它可能非常廣泛,每個對象在每個幀期間都會在容器中搜索另一個對象。

3)每個Foo對象跟蹤具有一個指向它的指針的對象。 該對象在殺死(刪除)時調用其他對象的方法。然後這些對象刪除指向已刪除對象的指針。還有其他的課程。所以這不是真正的面向對象。

我實際上認爲有一個簡單的解決方案,我找不到。

回答

4

基本上所有這些對象共享這個Killable對象的所有權。你可以給他們最強有力的保證是它不會從他們下面被刪除。你可以通過給每一個boost::shared_ptr來完成。當它死亡時通知所有對象將允許它們放棄它們的參考。您可以使用boost::signals來完成此操作。我會爲此嘗試。

如果你不能這樣做,那麼你可以讓他們存儲一個boost::weak_ptr,當他們對boost::weak_ptr::lock的呼叫失敗時,他們會知道它已經死了。

相關問題