C ++ unique_ptr和观察者模式最佳实践

时间:2014-04-06 12:32:46

标签: c++ memory-management c++11 observer-pattern smart-pointers

我正在尝试编写正确的C ++ 11应用程序,并且我面临着使用观察者设计模式进行内存管理的问题。

我的发射器和侦听器归同一个类所有,存储在std::unique_ptr中。 我想写的代码应该是这样的:

class Listener {
    Emitter &myEmitter;

    public:
        Listener(Emitter &emiter): myEmitter(emitter) {
            myEmitter.register(*this);
        }
        virtual ~Listener() {
            myEmitter.unregister(*this);
        }
}
class Emitter {
    std::vector<Listener*> myListeners;
    public:
        void register(Listener &listener) {
            myListeners.push_back(&listener);
        }
        void unregister(Listener &listener) {
            myListeners.erase(std::remove(myListeners.begin(), myListeners.end(), &listener));
        }
}
class Owner {
    std::unique_ptr<Listener> theListener;
    std::unique_ptr<Emitter> theEmitter;
}

这是一种正确的方法吗?

0 个答案:

没有答案