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

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

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

static MyClassA a;
thread_local static MyClassB b;

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

2

Решение

[Basic.start.term] / p1:

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

7

Другие решения


По вопросам рекламы [email protected]