我想要一个线程变量作为这样的类成员:

class Example{
    public:
        void startTask();
    private:
        std::thread m_taskThread;
}

我的问题是:
  • 假设此线程对象的创建将在startTask()中进行,那么此线程对象的作用范围是什么?它会像普通成员变量一样销毁直到Example类对象被破坏吗?还是它的范围是该特定方法(startTask())的范围?
  • 如果我希望该线程与.join()对象一样长,我应该在哪里在生成的线程上调用Example?在Example类的析构函数中?
  • 一些在线资料(https://thispointer.com/c11-how-to-use-stdthread-as-a-member-variable-in-class/)说如果我需要使用std::thread作为成员变量,我应该创建仅移动类,这是为什么呢?
  • 将线程对象作为成员变量好吗?原因
  • 最佳答案



    线程对象的范围在Example对象的级别。但是,直到调用startTask(),线程才会开始运行。不要混淆具有线程实例和正在运行的线程实例。



    是的,您可以在析构函数中调用它,它很安全。



    因为std::thread是不可复制的,但它是可移动的。因此,您的示例类也无法复制。



    是的,为什么不。我认为没有问题。您创建一个负责管理资源(即线程)的类。

    08-27 23:40
    查看更多