C++11 什么时候是析构函数或终止于调用

C++11 什么时候是析构函数或终止于调用,c++11,stdthread,C++11,Stdthread,我使用的是C++11 std::thread。我的困惑是基于以下几点: 如果线程上既没有调用join()也没有调用detach(),则会调用线程上的terminate()。 这意味着当线程返回时: a.它检查是否调用了它上面的join()或detach(),如果没有,则调用terminate()(生成一个coredump) b.如果调用了join(),线程的析构函数将由main(或调用线程)调用 c.如果在线程执行时调用了detach(),则该线程不会返回main进行清理,而是由该线程本身负责调

我使用的是C++11 std::thread。我的困惑是基于以下几点:

如果线程上既没有调用
join()
也没有调用
detach()
,则会调用线程上的
terminate()
。 这意味着当线程返回时:

a.它检查是否调用了它上面的
join()
detach()
,如果没有,则调用
terminate()
(生成一个coredump)

b.如果调用了
join()
,线程的析构函数将由main(或调用线程)调用

c.如果在线程执行时调用了
detach()
,则该线程不会返回main进行清理,而是由该线程本身负责调用自己的析构函数

问题:如果以上几点都是真的,那么我不明白在哪个确切点终止线程的决定是基于是否调用了
join()
还是
detach()

void function_1()
{
        return;
}
int main()
{
        std::thread t1(function_1);
        std::cout<<"\nFirst Sleep for 5 seconds:\n"; 
        sleep(5);

        cout<<"\n2nd Sleep for 5 seconds:\n";
        sleep(5);

        if(t1.joinable())
        {
                cout<<"\nGonna join()\n";
                t1.detach();
        }
        cout<<"Exiting from main ...\n";
void函数_1()
{
返回;
}
int main()
{
std::线程t1(函数_1);

std::cout看起来您混淆了两件事:std::thread
对象和该对象管理的执行线程

std::terminate
的调用由
std::thread
对象的析构函数触发(如果它是可接合的)。这与
std::thread
对象管理的执行线程是否已完成执行没有直接关系

<> >代码中的析构函数:<代码> t1>代码>:触发<代码>:ST::<代码> T1<代码>是一个普通C++对象,这里是代码<> main < /代码>的局部变量。当它的范围结束时,它被破坏了。这里主要是main。/在
t1
上执行code>或
detach
函数_1
是否已在其执行线程上完成运行与此无关