gpt4 book ai didi

c++ - 通过对 C++ 线程的引用传递局部变量

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:22 25 4
gpt4 key购买 nike

我在review一个小辈同事的代码,遇到了如下代码。

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

他们通过引用传递局部变量,然后退出函数。当最终调用这些函数时,局部变量可能不存在。然而,这个程序并没有崩溃。这是如何工作的?

最佳答案

boost::bind 复制您给它的参数并将拷贝存储在它返回的函数对象中。当函数被调用时,它不会作用于对局部变量(不再存在)的引用,而是作用于对拷贝(仍然有效)的引用。

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

关于c++ - 通过对 C++ 线程的引用传递局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com