我有一个简单的事件处理系统,它给我带来了问题。要使用它,我从类继承EventHandler
。然后构造函数在构造时注册每个对象。
这是EventHandler
的构造函数:
EventHandler::EventHandler()
{
EventDispatcher::getInstance().registerListener(this);
}
这调用了将其存储在向量中EventDispatcher
的成员函数。registerListener()
void EventDispatcher::registerListener(EventHandler* listener)
{
mListenerList.push_back(listener);
}
mLisernerList 在哪里看起来像:
vector<EventHandler*> mListenerList;
EventDispatcher
只需调用向量的每个sendEvent()
元素上的 来通知它事件。
让我举一个例子来说明我的问题。假设我的类Buttons
继承自EventHandler
. 我将在堆上创建按钮对象,然后将指向所有按钮的智能指针放在一个向量中。
vector<unique_ptr<Buttons>> mButtons;
mButtons.push_back(unique_ptr<Buttons>(new Button()));
发生的事情是我最终得到了unique_ptr
mButtons 中的 s 向量和 mListenerList 中指向相同动态分配的 Button 对象的原始指针向量。我不希望智能指针和原始指针指向同一个对象。
理想情况下,我希望 mButtons 中的shared_ptr
s 向量和 mListenerList 中的s 向量weak_ptr
指向动态分配的 Button 对象,同时允许 EventHandler 在创建时注册每个对象。这可能吗?