通过引用C ++线程传递局部变量

时间:2016-08-27 13:07:20

标签: c++ c++11

我正在审查一位初级同事的代码并遇到以下代码。

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);
    }
}

它们通过引用传递一个局部变量,然后退出该函数。最后调用这些函数时,可能不存在局部变量。然而,这个程序不会崩溃。这是怎么回事?

1 个答案:

答案 0 :(得分:8)

boost::bind复制您提供的参数,并将副本存储在它返回的函数对象中。调用函数时,它不会对局部变量(不再存在)的引用,而是对副本的引用(仍然有效)。

如果您确实希望boost::bindstd::bind使用对变量的引用(此处不需要),则需要将变量传递给bind boost::ref(var)std::ref(var)