假设我有一个这样的课程
class foo
{
void foo()
{
std::thread t(std::bind(&foo::doSomething,this));
t.detach();
}
void doSomething()
{
while(true)
{
//Does some stuff here
}
}
};
我的问题是在上面的场景中,如果foo类析构,分离的线程也会终止吗?从我目前的观察看来它似乎确实退出。我也相信这是因为线程可以访问实例的成员变量,一旦调用析构函数,那些成员变量就不再存在,所以它有意义得出结论,线程也退出了。如果我的理解是错误的,请纠正我。如果线程不访问成员变量,如果类破坏了它还会退出吗?
答案 0 :(得分:2)
不,它不一定会退出。如果它在foo
被销毁之后访问启动它的foo
成员,则表示您有未定义的行为。那个可能有doSomething
退出的症状,线程自然停止,或其他任何东西。