Я хочу знать, если функции зарегистрированы с atexit()
Вызываются до или после уничтожения глобальных переменных. Это определяется стандартом или определением реализации?
Он четко определен и зависит от того, был ли данный объект создан до или после регистрации функции с использованием atexit()
:
3.6.3 Прекращение
3. Если завершение инициализации объекта со статической длительностью хранения упорядочено до вызова
std::atexit
(увидеть<cstdlib>
, 18.5), вызов функции переданstd::atexit
последовательность перед вызовом деструктора для объекта. Если звонок вstd::atexit
последовательность перед завершением инициализации объекта со статической продолжительностью хранения, вызов деструктора для объекта упорядочивается до того, как вызов функции переданstd::atexit
, Если звонок вstd::atexit
последовательность перед другим вызовомstd::atexit
вызов функции передан второмуstd::atexit
вызов вызывается до того, как вызов функции передается первомуstd::atexit
вызов.
Моя дилетантская интерпретация вышеизложенного — это то, что было построено до вы назвали atexit(handler)
разрушается после handler()
называется, и наоборот. Я уверен, что есть тонкости, но это, кажется, основной принцип.
Других решений пока нет …