Когда функция, зарегистрированная с помощью atexit (), называется

Я хочу знать, если функции зарегистрированы с atexit() Вызываются до или после уничтожения глобальных переменных. Это определяется стандартом или определением реализации?

11

Решение

Он четко определен и зависит от того, был ли данный объект создан до или после регистрации функции с использованием 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() называется, и наоборот. Я уверен, что есть тонкости, но это, кажется, основной принцип.

20

Другие решения

Других решений пока нет …