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 подскажет развёрнутый ответ в реальном времени.