ポインターをベクターに保持する状況にあり、それらを使用して dtor のメモリを解放できます。
ブースト信号からのコールバック(スロット)をリッスンするオブジェクトがあります。これらのオブジェクトは、作成された場所よりもはるかに後で放出されたブースト信号をリッスンする必要があるため、作成されたメソッドよりも大きなスコープを持つ必要がありました。メモリをヒープに割り当てる必要があり、そのインスタンスを使用して信号をブーストするためにすぐにサブスクライブしました。
これらのオブジェクトは、シグナルを保持しているクラスが破棄されたときにメモリから割り当てを解除する必要があります。
ブースト信号が範囲外になり、すべてのリスニング ブースト:バインド オブジェクトが破棄されると、ブーストはこれらすべてのオブジェクトの割り当てを解除しますか??
共有ポインターまたはスマートポインターはこれに役立ちますか?
デストラクタで割り当てを解除するには、Signaling Service にこれらすべてのポインタのベクトルを用意する必要がありますか?もっと良い方法はありますか?
void methodA(){ CallbackHandler* cbHandler=new CallbackHandler(..); //Allocating in heap as we want to receive boost signals on //this instance even after this method exits signalingService.subscribeToCertainSignals(signalType,boost::bind(&CallbackHandler::boostSlotListener,cbHandler,_1)); } // Boost Signal -SignalingService boost::signal<void (const std::string &msg)> signal1; boost::signal<void (const std::string &msg)> signal2; void subscribeToCertainSignals(const std::string& signalType,boost::function<void (const std::string& str)> bindObject){ this->signal1.connect(bindObject); this->signal2.connect(bindObject); } void sendSignals(A a){ if(check){ this->signal1("somestring1"); }else{ this->signal1("somestring1"); }
};