Моти прямо о порядке, но есть и другие вещи, чтобы рассмотреть следующие вопросы:
Составители обычно используют переменное скрытый флаг, чтобы указать, если местная статика уже инициализированы, и этот флаг проверяется на каждом входе к функции. Очевидно, что это небольшой успех, но главное, что этот флаг не гарантирует потокобезопасность.
Если у вас есть локальный статический, как указано выше, а «foo» вызывается из нескольких потоков, у вас могут быть условия гонки, вызывающие неправильную или даже многократную инициализацию «plonk». Кроме того, в этом случае «plonk» может быть разрушен другим потоком, чем тот, который его построил.
Несмотря на то, что стандарт говорит, я бы очень настороженно относился к фактическому порядку локального статического разрушения, потому что возможно, что вы можете невольно полагаться на статичность, которая остается действительной после ее разрушения, и это действительно сложно отслеживать.
Обычно я не голосую за вопросы, на которые ответчик сразу ответил сам, но этот интересен. Спасибо, что вызвали это. – 2008-10-29 12:31:33
@ Мотти Линк мертв. – Zaimatsu 2015-08-26 08:25:42
@ Zaimatsu ссылка все еще работает для меня. – Motti 2015-08-29 18:34:16