C 静态与线程存储持续时间破坏顺序

c++ static vs thread storage duration destruction order

本文关键字:顺序 持续时间 存储 静态 线程      更新时间:2023-10-16

考虑在C 中如何有这两个存储持续时间(除其他):静态存储持续时间和线程存储持续时间。

接下来考虑此代码:

static MyClassA a;
thread_local static MyClassB b;

另外假装" A"answers" B"可能不在同一汇编单元中。我"相信" b"的驱动器将在" A"之前调用,因为线程存储持续时间将首先终止,并且仅在此之后才能完成,静态存储持续时间将终止,并将其称为" A"的破坏者。我一直在寻找对此的标准参考,但我找不到一个。有人可以通过权威来源确认吗?

[basic.start.term]/p1:

具有线程存储持续时间的初始化对象的破坏者 在给定线程中,由于从 该线程的初始函数以及该线程调用的结果 std::exit。所有初始化的破坏者的完成 该线程中具有线程存储持续时间的对象被测序 在开始使用静态物体的破坏者之前 存储持续时间。