gpt4 book ai didi

c++ - 为什么 std::thread 采用右值运行的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:18 26 4
gpt4 key购买 nike

std::thread 有一件事我不明白:为什么 std::thread 的构造函数采用右值运行的函数?

我通常想将具有一些成员的 Functor 运行到另一个线程。像这样:

struct Function
{
void operator() ( /* some args */)
{
/* some code */
}

/* some members */
}


void run_thread()
{
Functor f( /* some data */);
std::thread thread(f, /* some data */);

/* do something and wait for thread to finish */
}

随着 std::thread 的当前实现,我必须确保我的对象正在实现移动语义。我不明白为什么我不能通过引用传递它。

额外的问题是:通过右值引用函数是什么意思? Lambda 表达式?

最佳答案

在您的 run_thread 方法中,f 是一个自动变量。这意味着范围底部的 f 将被销毁。您声称您将“等待线程完成”,但编译器/运行时系统不知道!它必须假定 f 将被删除,可能在应该调用其方法的线程有机会启动之前。

通过复制(或移动)f,运行时系统可以控制它的 f 拷贝的生命周期,并且可以避免一些非常讨厌、难以调试的事情问题。

关于c++ - 为什么 std::thread 采用右值运行的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31013689/

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