我想要一个线程变量作为这样的类成员:
class Example{
public:
void startTask();
private:
std::thread m_taskThread;
}
我的问题是:
startTask()
中进行,那么此线程对象的作用范围是什么?它会像普通成员变量一样销毁直到Example
类对象被破坏吗?还是它的范围是该特定方法(startTask()
)的范围? .join()
对象一样长,我应该在哪里在生成的线程上调用Example
?在Example
类的析构函数中? 最佳答案
线程对象的范围在Example对象的级别。但是,直到调用startTask(),线程才会开始运行。不要混淆具有线程实例和正在运行的线程实例。
是的,您可以在析构函数中调用它,它很安全。
因为std::thread是不可复制的,但它是可移动的。因此,您的示例类也无法复制。
是的,为什么不。我认为没有问题。您创建一个负责管理资源(即线程)的类。