是否可以从同一个线程中移动assign std :: thread对象

时间:2016-10-07 06:49:27

标签: c++ c++11

可以执行以下操作吗?

#include <iostream>
#include <thread>

std::thread th;

void foo()
{
    std::cout << __func__ << std::endl;
    th = std::thread(foo);
}

int main()
{
    th = std::thread(foo);
    th.join();
}

gcc崩溃 - http://coliru.stacked-crooked.com/a/3c926507ab0f8a5c

我知道几乎没有必要这样做,但我想知道答案只是出于学术目的。

1 个答案:

答案 0 :(得分:4)

th = std::thread(foo);

你没有加入你的主题。

http://en.cppreference.com/w/cpp/thread/thread

  

破坏线程对象,底层线程必须加入或分离

如另一个答案的评论中所述,赋值与销毁具有相同的要求,因为前一个线程对象丢失了。