C++中静态和线程存储期的销毁顺序问题

3
考虑在C++中有这两种存储期(除其他外):静态存储期和线程存储期。 接下来考虑以下代码:
static MyClassA a;
thread_local static MyClassB b;

另外假设 "a" 和 "b" 可能不在同一个编译单元中。我“相信”在线程存储期结束并且静态存储期终止并调用“a”的析构函数之前,将先调用“b”的析构函数。 我一直在寻找标准参考文献,但未能找到。 有人可以通过权威来源具体确认这一点吗?

1个回答

8

[basic.start.term]/p1:

线程存储期内已初始化对象的析构函数会在该线程初始函数返回时和该线程调用std::exit时被调用。所有线程存储期内已初始化对象的析构函数完成之后,才会启动任何具有静态存储周期的对象的析构函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接