Mediumstaticlifetime

Что такое static lifetime и каковы особенности static-объектов?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Static-объекты существуют всё время работы программы. Бывают: глобальные переменные, static-члены классов, static-локальные переменные функций.

int global = 42;                 // static storage duration

T& instance() {                  // Construct On First Use — потокобезопасно
    static T inst;               // инициализируется при первом вызове
    return inst;
}

Особенности:

  • Static-локальные инициализируются при первом вызове, thread-safe в C++11+;
  • Инициализация: constant (constexpr) до dynamic init; dynamic — в порядке определения внутри TU;
  • Static initialization order fiasco: порядок между TU unspecified — int x = f(); где f() использует global из другого TU может получить неинициализированное значение. Решение — Construct On First Use (static-локальная функция-геттер);
  • Уничтожение в обратном порядке, до выхода из main. Доступ после main — UB.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.