我对std::thread
类的Visual Studio 2012实现有疑问。
Error C2248: "std::thread::thread": cannot access private member declared in class std::thread
c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 line: 606
A.hpp:
class A{
public:
A();
~A();
private:
vector<thread> listOfThreads;
int numberOfProcessorCores;
int startUpWorkerThreads();
};
A.cpp:
int A::startUpWorkerThreads(){
if(numberOfProcessorCores <= 0) return 2; //Keine Angabe zur Anzahl der Prozessorkerne
if(listOfThreads.size() > 0) return 3; //Bereits initialisiertdefiniert
for(int i = 0; i < numberOfProcessorCores; i ++){
thread newThread(&TaskManagement::TaskManager::queueWorker);
listOfThreads.push_back(newThread);
}
return 0;
}
这是我的程序中使用线程类的部分。
有人知道这个错误发生的原因吗?
答案 0 :(得分:3)
错误告诉您某个操作正在尝试调用std::thread
的复制构造函数或赋值运算符,这两个操作都被删除或私有。作为替代方案,您可以通过按下这样的临时“将”线程“移动”到向量中:
listOfThreads.push_back(thread(&TaskManagement::TaskManager::queueWorker));
否则,你可以在你的线程对象上调用std::move
,这会留下一个与默认构造状态相同状态的线程对象(感谢@JonathanWakely在注释中指出它)。在您的情况下,没有理由创建一个线程并明确移动它。
答案 1 :(得分:0)
std::thread
没有复制构造函数,执行push_back
并且可能需要执行其他vector
操作。