問題を引き起こしている単純なイベント処理システムがあります。それを使用するには、 class から継承し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
。ヒープ上にボタン オブジェクトを作成し、すべてのボタンへのスマート ポインターを 1 つのベクターに配置します。
vector<unique_ptr<Buttons>> mButtons;
mButtons.push_back(unique_ptr<Buttons>(new Button()));
何が起こるかとunique_ptr
いうと、mButtons の s のベクトルと、同じ動的に割り当てられた Button オブジェクトを指す mListenerList の生ポインタのベクトルになります。同じオブジェクトを指すスマート ポインターと生のポインターは必要ありません。
理想的には、作成時に EventHandler がすべてのオブジェクトを登録できるようにしながら、動的に割り当てられた Button オブジェクトを指す mButtonsshared_ptr
の s のベクトルと mListenerList のs のベクトルが必要です。weak_ptr
これは可能ですか?