来源:https://stackoverflow.com/questions/60860349/can-i-return-stdthread
例如代码要返回 std::thread
对象
std::thread getWindowThread(std::function<void()> f){
std::thread t(f);
return t;
}
那么这个线程对象的行为如下
-
joinable()
isfalse
~thread();
Effects: Ifjoinable()
, callsterminate()
. Otherwise, has no effects. 如果是joinable
的线程,那么 return 后,必须要有一个std::thread
对象来接收这个值,否则会导致线程对象的析构函数被调用,然后就 coredump 了。 -
如果要将一个线程对象复制给另一个线程对象,需要使用
std::move
,不然会导致编译错误。 -
或者创建线程后执行
t.detach()
,这样即使调用析构函数,也没什么影响。也就不需要在函数返回的时候用另一个对象接收了。