我正在尝试编写正确的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;
}
这是一种正确的方法吗?