私は後輩のコードを見直して、次のコードを見つけました。C++スレッドへの参照によるローカル変数の受け渡し
void ActionGetId(boost::property_tree::ptree& callInfo);
void ActionPutId(boost::property_tree::ptree& callInfo);
void handler(int type, std::string data)
{
boost::property_tree::ptree callInfo(data);
if(type == 0)
{
_ioService.post(boost::bind(&ActionGetId, callInfo);
}
else
{
_ioService.post(boost::bind(&ActionPutId, callInfo);
}
}
ローカル変数を参照渡ししてから、関数を終了します。これらの関数が最後に呼び出されると、ローカル変数が存在しない可能性があります。しかし、このプログラムはクラッシュしません。これはどのように機能していますか?
_ "このプログラムはクラッシュしません。どのように機能していますか?"クラッシュしないということは、正しく動作するということではありません。未定義の動作は未定義です。 –
'callinfo'はboost bindの中にコピーされます。 – Arunmu
コードを簡略化して、何がスレッドに渡され、どのようにクリアされるのでしょうか? '_ioService.post'が何をするかは誰も知らない。 – juanchopanza