【发布时间】:2023-03-10 03:34:01
【问题描述】:
我正在尝试创建“guarded_thread”,但收到错误消息“operator=”是“std::__1::thread”的私有成员。这是我的代码:
struct guarded_thread : std::thread{
using std::thread::thread;
using std::thread::operator=;
~guarded_thread(){if(joinable())join();}
};
一个函数完成了这项工作,但我想知道如何以另一种方式创建它
void Guarded_thread(std::thread &Thread){
if (Thread.joinable()) {
Thread.join();
}
}
【问题讨论】:
-
请出示minimal reproducible example 并解释您的代码应该做什么。这个错误不是很容易解释吗?您正在尝试使用
std::thread上的私有赋值运算符 -
请注意,C++20 有
std::jthread,并且(公开)从 std 类型继承并不总是最好的主意。 -
std::thread不能被复制,因此任何类都不能从它继承。但是你可以为你的类创建一个简单的std::thread成员变量,而不是继承。 -
代码也没有考虑到线程可以无限期地运行并且在调用析构函数时运行。 jthread被要求从析构函数中停止,这是jthread的一个特性。
标签: c++ multithreading stdthread