Проблема в том, что вы пытаетесь описать процессы с точки зрения функциональной перспективы.Это не работает для C ++, так как у нас нет концепции «статической инициализации» или функций / кода, которые выполняются до main()
.
В C ++ способ запуска кода до / после main()
через строительство / уничтожение объектов.Таким образом, вы должны описать процессы в терминах этих понятий.
То, что вы называете «статической инициализацией», на самом деле является созданием объектов длительности статического хранения.Теперь, когда вы используете эту фразу, программисты на C ++ мгновенно распознают ее и вздрагивают (из-за всех связанных с этим сложностей, о которых вы должны знать).
Противоположность этому: уничтожение объектов длительности статического хранения.
Это термины, которые вы должны использовать.
Они передают точное значение, которое вы ищете, другим опытным программистам.
Дополнительные сведения об объектах длительности хранения:
В C ++ существует 4 типа объектов.
- Объекты статической длительности хранения
- Объекты динамической длительности хранения
- Объекты автоматической памяти хранения
- ThreadОбъекты длительности хранения.
Каждый тип имеет определенное время, когда он создается и уничтожается.
Кроме того, существуют правила, если базовая память инициализируется сначала нулем.
Тогда существуют правила, когда вызывается конструктор / деструктор объектов (если тип объектов имеет конструкторы / destructors).
Объекты статической длительности хранения
Для объектов "Статическая длительность хранения" их можно построить до main.Но это немного сложнее, чем это (поскольку некоторые создаются лениво, когда это необходимо, в то время как другие создаются только после доступа к пространству имен).
НО порядок уничтожения составляет 100%хорошо определены.Это прямо противоположный порядок строительства.Таким образом, все объекты «Static Storage Duration» будут уничтожены (после завершения main) в порядке, обратном их построению.Когда объект уничтожен, вызывается его деструктор (если он есть).