如果我通过lambda中的引用捕获一个变量,然后将该lambda按值传递给一个新线程,我希望该变量被复制(作为lambda的一部分),但这似乎并不是是这样的。
我希望以下代码能够打印hello
,但它没有。你能解释一下原因吗?
void foo(std::function<void()>& func)
{
std::thread t([func]() // capture func by value
{
Sleep(1000);
func();
});
t.detach();
}
int main()
{
{
std::string str("hello");
std::cout << "Main: Address of str is " << &str << std::endl;
std::function<void()> func = [&str]() // capture str by reference
{
std::cout << "Func: Address of str is " << &str << std::endl;
std::cout << str << std::endl;
};
foo(func);
}
std::cin.get();
}