如果其拥有的类破坏,则分离的线程是否终止

时间:2017-11-15 16:22:26

标签: multithreading c++11

假设我有一个这样的课程

class foo
{
  void foo() 
  {
     std::thread t(std::bind(&foo::doSomething,this));
     t.detach();
  }

  void doSomething()
  {
     while(true)
     {
       //Does some stuff here
     }
  }
};

我的问题是在上面的场景中,如果foo类析构,分离的线程也会终止吗?从我目前的观察看来它似乎确实退出。我也相信这是因为线程可以访问实例的成员变量,一旦调用析构函数,那些成员变量就不再存在,所以它有意义得出结论,线程也退出了。如果我的理解是错误的,请纠正我。如果线程不访问成员变量,如果类破坏了它还会退出吗?

1 个答案:

答案 0 :(得分:2)

不,它不一定会退出。如果它在foo被销毁之后访问启动它的foo成员,则表示您有未定义的行为。那个可能doSomething退出的症状,线程自然停止,或其他任何东西。