В чем разница между функциями в .dtors
и функциями, вызываемыми с помощью atexit()
?
Насколько я понимаю, функции, отмеченные атрибутом ((destructor))
, находятся в сегменте .dtors
, и вызываются после выхода. Точно так же функции, добавленные с помощью atexit(fctName)
, помещаются в массив и также вызываются после нормального завершения выполнения.
Так почему же C ++ предоставляет здесь два разных механизма? Есть ли разные вещи, которые можно сделать только с одним? Могу ли я добавить функцию только динамически, используя atexit()
?
Также какие функции вызываются первыми: функции из .dtors
или функции, добавленные с помощью atexit()
?
destructor
также не определен стандартом. Это расширение языка (C).atexit
определен в стандарте C, поэтому можно сказать, что он в C ++, потому что он унаследован от C. - person eerorika   schedule 02.02.2015