C++ static vs порядок уничтожения продолжительности хранения потока

Рассмотрим, как в C++ существуют эти две длительности хранения (среди прочих): статическая длительность хранения и длительность хранения потока.,

Далее рассмотрим этот код:

static MyClassA a;
thread_local static MyClassB b;

Допустим, что "a" и "b" могут находиться не в одной и той же единице компиляции. Я "верю", что деструктор "b" будет вызываться до "a", так как продолжительность хранения потока будет заканчиваться первой, и только после того, как это будет завершено, статическая продолжительность хранения завершится и вызовет деструктор "a". Я искал стандартную ссылку на это, но я не смог найти. Может ли кто-то конкретно подтвердить это авторитетным источником?

1 ответ

Решение

[Basic.start.term]/p1:

Деструкторы для инициализированных объектов с продолжительностью хранения потока в данном потоке вызываются в результате возврата из начальной функции этого потока и в результате вызова этого потока std::exit, Завершение деструкторов для всех инициализированных объектов с продолжительностью хранения потока в этом потоке секвенируется до инициации деструкторов любого объекта со статической продолжительностью хранения.

Другие вопросы по тегам