我在 C++ 中创建了一个名为AnalyzerCore 的类,如下所示:
AnalyzerCore.h
class AnalyzerCore
{
private:
thread AnalyzerThread;
void AnalyzerFunc();
bool isRunning;
int id;
public:
AnalyzerCore(int id_in);
~AnalyzerCore();
};
AnalyzerCore.cpp
void AnalyzerCore::AnalyzerFunc()
{
while (isRunning) {
cout << "Analyzer "<< id << " is active!\n";
this_thread::sleep_for(chrono::seconds(1));
}
}
AnalyzerCore::AnalyzerCore(int id_in)
{
id = id_in;
isRunning = true;
AnalyzerThread = thread(&AnalyzerCore::AnalyzerFunc, this);
}
AnalyzerCore::~AnalyzerCore()
{
isRunning = false;
if (AnalyzerThread.joinable()) AnalyzerThread.join();
}
在main.cpp中,我制作了一个AnalyzerCore向量和calss的push_back 2实例
int main()
{
vector<AnalyzerCore> a;
a.push_back(AnalyzerCore(0));
a.push_back(AnalyzerCore(1));
this_thread::sleep_for(chrono::seconds(10));
std::cout << "Hello World!\n";
}
但是当我上面构建时,我遇到了以下错误:
'AnalyzerCore::AnalyzerCore(const AnalyzerCore &)':尝试 引用已删除的函数
我的代码有什么问题,您建议如何修复它? 谢谢!
您无法复制
std::thread
(这意味着什么?),因此您无法复制 AnalyzerCore
。您可以使用 std::vector::emplace_back
直接在向量中构造对象,而不是构造临时对象,然后将其复制到向量中:
#include <thread>
#include <vector>
struct foo {
std::thread t;
int value;
foo(int value) : value(value) {}
};
int main() {
std::vector<foo> ts;
ts.emplace_back(42); // OK
foo f;
ts.push_back(f); // error
}