dln*_*dln 4 c++ observable observer-pattern
我使用公司中不同组提供的第三方库(用C++编写)遇到了这个问题.
在Observer的析构函数中,它将自己从它所订阅的所有可观察对象中分离出来,这部分对我来说是有意义的.但是在Observable的析构函数中,它会检查observable是否有任何仍然在其订阅者列表中的观察者.如果是这样,则抛出错误.
我要说的是它故意在析构函数中抛出一个错误.有人可以试着向我解释为什么观察者应该期望没有观察者比自己活得更久,或者这只是一个糟糕的设计.如果这是一个糟糕的设计,当我们处于观察者超过观察者的情况下,是否有好的方法来处理它?
如果Observer具有Observable的指针(或引用),并且Observable被销毁,则该指针将无效.作者只是试图避免悬挂引用.
我认为有三种常用的解决方案.
一个是完成这个代码所做的事情,也许是调用abort()而不是在析构函数中抛出异常.
另一个是让Observable的析构函数从任何观察者中取消注册.
最后一个是使用"智能指针"(例如,引用计数shared_ptr)来保证Observable超过任何Observer.