是否保证在销毁所有线程本地存储对象后销毁全局对象
Are global objects guaranteed to be destructed after all thread-local-storage objects are destructed?
#include <thread>
using namespace std;
struct A
{
A() {}
~A() {}
};
A g_a;
int main()
{
thread([]()
{
thread_local A tl_a;
exit(0);
}).detach();
}
C++标准保证g_a
在tl_a
被销毁后会被销毁吗?
是的,确实如此。
语言规范中的 [basic.start.term] 部分说
具有静态存储的初始化对象(即生存期 (3.8( 已开始的对象(的析构函数 (12.4( 持续时间是由于从主返回和调用 std::exit (18.5( 的结果而调用的。析 构 函数 对于在给定线程内具有线程存储持续时间的初始化对象,由于返回 从该线程的初始函数以及该线程调用 std::exit 的结果。竣工情况 对线程内线程存储持续时间的所有初始化对象的析构函数进行排序 在启动具有静态存储持续时间的任何对象的析构函数之前。
因此,线程局部变量将在静态(全局(变量之前被销毁。
相关文章:
- C++ 在堆栈中包含多态属性的类对象存储
- 将对象存储为其基本虚拟类
- 将大型对象存储在无序映射中是否效率低下
- C++:将未知类型的对象存储为成员变量的类
- 按unique_pointer将传递的对象存储在地图中
- 如何将 c++ 类对象存储为数组?
- 将对象存储在 std::map 中
- 是否存在对象存储在其生存期内可能会更改的情况?
- 将不同类型的对象存储在容器中
- 将自定义可绘制对象存储在数组中会导致绘制时出现分割错误
- 我将如何在C++中文件处理对象(存储/导入)
- 将对象存储在C 中的2维Sprite矩阵中
- 将抽象派生类对象存储在基类向量中
- 将任意函数对象存储到类成员容器中,而无需知道其声明签名
- 如何使用向量将类对象存储在超载操作员中
- 适当的方法将对象存储在Std矢量中
- 将向量对象存储在共享指针投掷错误中
- 将多态对象存储在unordered_set中
- 为什么我可以将对象存储在大小不同的数组中
- 返回对象存储在哪里