Для обычных глобальных объектов в одной единице трансляции динамическая инициализация идёт по порядку определений, а разрушение — в обратном порядке завершённой инициализации.
Порядок вызова конструкторов и деструкторов для глобальных переменных std::string
Для обычных глобальных объектов в одной единице трансляции динамическая инициализация идёт по порядку определений, а разрушение — в обратном порядке завершённой инициализации.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для обычных глобальных объектов в одной единице трансляции динамическая инициализация идёт по порядку определений, а разрушение — в обратном порядке завершённой инициализации.
Для объектов из разных .cpp нельзя в общем случае полагаться на порядок их определений в проекте: зависимость одного глобального std::string от другого создаёт риск static initialization order fiasco. Inline-переменные и шаблонные специализации имеют дополнительные правила.
Если требуется управляемая зависимость, передавайте объект явно либо используйте функцию с локальным static, создаваемым при первом обращении. Конкретный вывод программы определяется также кодом и способом завершения: аварийный выход не равен нормальному вызову всех деструкторов.
Источник: eel.is.