线程作为类的成员变量

Giz*_*zmo 1 c++ c++11 stdthread

我想在某个类的成员变量中保留一个线程。以下代码段显示了我想要实现的目标:

#include <iostream>
#include <thread>
#include <vector>


class Test {

    public:
    std::thread& t;    
    Test(std::thread&& rt) : t(rt) {}    
};

int main()
{
    std::vector<Test> tests;

    {
        std::thread t ([]{
            std::cout << 1;
        });
        tests.push_back(Test(std::move(t)));
    }   

    for(Test mytest : tests)
    {
        mytest.t.join();
    }

}
Run Code Online (Sandbox Code Playgroud)

该代码将在join()行处中断。错误是:

terminate called without an active exception
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)

保留原始线程创建的范围后,为什么不能通过mytest.t调用线程?

sec*_*pur 6

由于std :: thread是可移动的但不可复制,因此您可以这样做:

class Test {

public:
    std::thread t;
    Test(std::thread&& rt) : t(std::move(rt)) {}
};

int main()
{
    std::vector<Test> tests;

    {
        std::thread t([] {
            std::cout << 1;
        });
        tests.push_back(Test(std::move(t)));
    }

    for (Test& mytest : tests)
    {
        mytest.t.join();
    }

}
Run Code Online (Sandbox Code Playgroud)