Порядок вызова конструкторов и деструкторов для глобальных переменных std::string

Для обычных глобальных объектов в одной единице трансляции динамическая инициализация идёт по порядку определений, а разрушение — в обратном порядке завершённой инициализации.

Короткий ответ

Что ответить на собеседовании

Для обычных глобальных объектов в одной единице трансляции динамическая инициализация идёт по порядку определений, а разрушение — в обратном порядке завершённой инициализации.

Подробный разбор

Ответ с пояснениями

Для обычных глобальных объектов в одной единице трансляции динамическая инициализация идёт по порядку определений, а разрушение — в обратном порядке завершённой инициализации.

Для объектов из разных .cpp нельзя в общем случае полагаться на порядок их определений в проекте: зависимость одного глобального std::string от другого создаёт риск static initialization order fiasco. Inline-переменные и шаблонные специализации имеют дополнительные правила.

Если требуется управляемая зависимость, передавайте объект явно либо используйте функцию с локальным static, создаваемым при первом обращении. Конкретный вывод программы определяется также кодом и способом завершения: аварийный выход не равен нормальному вызову всех деструкторов.

Источник: eel.is.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее