前段时间在用std::shared_ptr/std::weak_ptr实现thread-safe和memory-safe的观察者模式(Observer Pattern)的时候,调试总给我报错,最后排查了很久,发现是一个非常tricky的小错误。
最开始的版本大概是这样子的:
class Observer;
class Subject {
public:
void registerObserver(std::shared_ptr<Observer> o) = 0;
void removeObserver(const std::shared_ptr<Observer>& o) = 0;
void notifyObservers() = 0;