如果删除了对象,C++会使所有指针无效

all*_*oll 2 c++

我有类BaseStream,以及创建新BaseStream的函数.另外我还有另一个带有BaseStream*字段的类.我怎么知道这个字段是否有效,因为BaseStream*的实例可以在某处删除

ps我不能使用std:和c ++ 11

Jam*_*nze 5

有两种解决方案.最强大的是使用Boehm收集器来回收内存; 以这种方式,您可以使用在析构函数中可识别为已删除对象的对象覆盖该对象,并且只要有指向它的指针就可以保证内存不会被回收,因此您可以在任何使用之前进行测试是否可以该对象已被删除.

但是,一般来说,你应该避免这个问题; 如上所述,Boehm收集器的使用应该是一种备用措施,访问被破坏的对象应该被视为内部软件错误,就像断言失败一样.使用观察者模式:任何具有指向对象的指针的代码都将其作为观察者注册,并且对象在其析构函数中通知它们,因此它们可以重置指针(或将其从地图或向量中移除,或者任何它们得做).

请参见http://en.wikipedia.org/wiki/Boehm_garbage_collector