나는 중학교 동료의 코드를 검토 중이며 다음 코드를 발견했습니다.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