ベクター内にポインタを保持し、dtor内のメモリーを解放できるようにしている状況です。ノーティファイヤ/シグナルがスコープ外に出たときに、ブースト・バインドでコールバック・リスナー・オブジェクトを割り振り解除する
ブースト信号からのコールバック(スロット)をリッスンするオブジェクトがあります。これらのオブジェクトは、作成されているメソッドよりもスコープが大きく、ブースト信号を聞く必要があります。メモリをヒープに割り当てる必要があり、即座にそのインスタンスを使用して信号をブーストすることに加入しました。クラスが信号を保持したときに今、これらのオブジェクトはメモリから割り当てを解除する必要があります
は
は、ブースト信号がスコープとすべてのリスニングの外に出たとき、すべてのこれらのオブジェクトの割り当てを解除後押しんが、私のオプションが何であるかdestroyed.Nowありますboost:バインドされたオブジェクトは破棄されますか?
これで共有ポインタまたはスマートポインタは役に立ちますか?
シグナリングサービスでこれらのポインタのベクトルを持って、デストラクタで割り当てを解除する必要がありますか?もっと良い方法はありますか?
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"); }
};あなたがこれを行うことができます
私はC++プログラミングを開始するJava開発者です。いくつかの良いC++の本を読んだが、やはり自分の道を見つけようとした。基本的に何かが間違っている場合は助言をしてください。 – Yeshvanthni