C++ static vs порядок уничтожения продолжительности хранения потока
Рассмотрим, как в C++ существуют эти две длительности хранения (среди прочих): статическая длительность хранения и длительность хранения потока.,
Далее рассмотрим этот код:
static MyClassA a;
thread_local static MyClassB b;
Допустим, что "a" и "b" могут находиться не в одной и той же единице компиляции. Я "верю", что деструктор "b" будет вызываться до "a", так как продолжительность хранения потока будет заканчиваться первой, и только после того, как это будет завершено, статическая продолжительность хранения завершится и вызовет деструктор "a". Я искал стандартную ссылку на это, но я не смог найти. Может ли кто-то конкретно подтвердить это авторитетным источником?
1 ответ
[Basic.start.term]/p1:
Деструкторы для инициализированных объектов с продолжительностью хранения потока в данном потоке вызываются в результате возврата из начальной функции этого потока и в результате вызова этого потока
std::exit
, Завершение деструкторов для всех инициализированных объектов с продолжительностью хранения потока в этом потоке секвенируется до инициации деструкторов любого объекта со статической продолжительностью хранения.