3

考虑在 c++ 中如何有这两个存储持续时间(以及其他):静态存储持续时间和线程存储持续时间。.

接下来考虑这段代码:

static MyClassA a;
thread_local static MyClassB b;

另外假设“a”和“b”可能不在同一个编译单元中。我“相信”“b”的析构函数将在“a”之前调用,因为线程存储持续时间将首先终止,只有在完成后静态存储持续时间才会终止并调用“a”的析构函数。我一直在寻找对此的标准参考,但我一直找不到。有人可以通过权威人士专门证实这一点吗?

4

1 回答 1

8

[basic.start.term]/p1:

作为从该线程的初始函数返回的结果以及该线程调用的结果,调用了在给定线程中具有线程存储持续时间的已初始化对象的析构函数 std::exit。在该线程中具有线程存储持续时间的所有已初始化对象的析构函数的完成在任何具有静态存储持续时间的对象的析构函数的启动之前进行排序。

于 2015-05-12T20:40:01.640 回答