转换为 std::thread 状态调用私有构造函数

Jas*_*son 0 c++ multithreading compiler-errors c++11

给定一个向量std::thread

std::vector<std::thread> vThreads;

vThreads.push_back(std::thread([]() {
        std::thread _t;
        _t.detach();
    }));

for (int i=0; i < vThreads.size(); i++)
{
    std::thread _t = (std::thread) vThreads.at(i); <!-- ERROR


}
Run Code Online (Sandbox Code Playgroud)

尝试在我得到的中执行演员for loopCalling a private constructor of class 'std::__1::thread'

但是看http://www.cplusplus.com/reference/thread/thread/我没有看到任何标记为私有的构造函数。

我误解了什么?

Pra*_*ian 5

std::thread是不可复制的。根据您在for循环中要执行的操作,您需要

std::thread& _t = vThreads.at(i);
Run Code Online (Sandbox Code Playgroud)

或者

std::thread _t = std::move(vThreads.at(i));
Run Code Online (Sandbox Code Playgroud)

我建议使用基于范围的 for 来循环vector

for(auto&& t : vThreads) {
  // t is a reference to an std::thread object
}
Run Code Online (Sandbox Code Playgroud)