2
#include <pthread.h>
#include <thread>
#include <iostream>
using namespace std;
struct A
{
~A()
{
cout << "~A()" << endl;
}
};
void* f(void*)
{
thread_local A a;
return 0;
}
int main()
{
pthread_t tid;
pthread_create(&tid, nullptr, f, nullptr);
this_thread::sleep_for(5min);
}
オブジェクトは、スレッドが開始されると割り当てられ スレッドが終了したときに割り当て解除されます。各スレッドには、オブジェクトの独自のインスタンスがあります。 オブジェクトが
thread_local
と宣言されている場合にのみ、この保存期間があります。どのようにC++コンパイラが知っているん裸スレッド(という
std::thread
より)が作成され、終了すると:?私は疑問に思う
言い換えれば
:裸のスレッド関数f
が終了した後、C++標準保証A::~A()
が
と呼ばれるのか?
これはC++標準の観点からは答えが難しい。なぜなら、C++標準ではあなたが使っている方法では「裸のスレッド」という概念がないからです。もちろん、C++スレッドはプラットフォーム固有の方法で実装されています。同じ実装を直接コーディングすると、同じ動作になる可能性があります。 –