Что является противоположностью статической инициализации? - PullRequest
0 голосов
/ 17 сентября 2018

При сообщении объектов, которые инициализируются до main(), мы обычно называем это «статической инициализацией».Существует ли стандартная терминология для противоположности этому, что-то вроде «статической деинициализации»?Это относится к моменту уничтожения этих статических объектов (после выхода из main()).

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Проблема в том, что вы пытаетесь описать процессы с точки зрения функциональной перспективы.Это не работает для C ++, так как у нас нет концепции «статической инициализации» или функций / кода, которые выполняются до main().

В C ++ способ запуска кода до / после main() через строительство / уничтожение объектов.Таким образом, вы должны описать процессы в терминах этих понятий.

То, что вы называете «статической инициализацией», на самом деле является созданием объектов длительности статического хранения.Теперь, когда вы используете эту фразу, программисты на C ++ мгновенно распознают ее и вздрагивают (из-за всех связанных с этим сложностей, о которых вы должны знать).

Противоположность этому: уничтожение объектов длительности статического хранения.

Это термины, которые вы должны использовать.
Они передают точное значение, которое вы ищете, другим опытным программистам.

Дополнительные сведения об объектах длительности хранения:

В C ++ существует 4 типа объектов.

  1. Объекты статической длительности хранения
  2. Объекты динамической длительности хранения
  3. Объекты автоматической памяти хранения
  4. ThreadОбъекты длительности хранения.

Каждый тип имеет определенное время, когда он создается и уничтожается.

Кроме того, существуют правила, если базовая память инициализируется сначала нулем.

Тогда существуют правила, когда вызывается конструктор / деструктор объектов (если тип объектов имеет конструкторы / destructors).

Объекты статической длительности хранения

Для объектов "Статическая длительность хранения" их можно построить до main.Но это немного сложнее, чем это (поскольку некоторые создаются лениво, когда это необходимо, в то время как другие создаются только после доступа к пространству имен).

НО порядок уничтожения составляет 100%хорошо определены.Это прямо противоположный порядок строительства.Таким образом, все объекты «Static Storage Duration» будут уничтожены (после завершения main) в порядке, обратном их построению.Когда объект уничтожен, вызывается его деструктор (если он есть).

0 голосов
/ 17 сентября 2018

Независимо от того, является ли объект статическим или динамическим, действие, которое происходит при вызове деструктора, называется «уничтожением».

Этот частный случай будет тогда "уничтожением статического объекта", противоположным "инициализации статического объекта".

0 голосов
/ 17 сентября 2018

Я бы назвал это "статическим конструктором" и "статическим деструктором". Проще произнести, чем "деинициализация".

...