可能在任何时候由几个物体指向死亡的物体

时间:2011-11-21 21:18:52

标签: c++

在我的游戏中,有很多Foo类的对象互相交互。类Foo的静态方法使用容器更新所有对象,以便跟踪创建的对象。

我的问题是Foo对象可以杀死另一个对象,其他Foo实例不知道这个可怕的事件,他们无论如何都可以使用死对象(删除),从而给出错误。

我有一些想法可以避免指向已删除的对象,但我认为它们并不合适。

1)一种检查空对象的智能指针。

可能这是更糟糕的想法,我没有看到任何类似的东西。我可以创建一个指针,当调用delete时,删除指向的Foo对象,然后在转换为Boolean时给出false(因此可以知道是否可以在其上调用方法)。

2)每个Foo对象不会使用指针但使用ID跟踪其他对象。

然后该对象获得一个指向另一个Foo对象的指针,该对象具有静态方法Foo类(正如我所说的Foo类有一个跟踪所有实例的容器)。 它也可以在多线程环境中进行简单的修改,但它可能非常广泛,每个对象在每个帧中搜索容器中的另一个。

3)每个Foo对象跟踪具有指向它的指针的对象。 该对象在被杀死(删除)时会调用其他对象的方法。然后这些对象擦除任何指向已删除对象的指针。还有其他课程。所以这不是真正的面向对象。

我实际上认为有一个我找不到的简单解决方案。

1 个答案:

答案 0 :(得分:4)

基本上所有这些对象都共享此可填充对象的所有权。你可以给予他们最强烈的保证是它不会被删除。您可以通过给每个人boost::shared_ptr来实现这一目标。在它们死亡时通知所有对象将允许它们删除它们的引用。您可以使用boost::signals来完成此任务。我会先尝试这个。

如果你不能这样做,那么你可以让他们存储boost::weak_ptr,当他们对boost::weak_ptr::lock的调用失败时,他们会知道它已经死了。