Вызывается ли когда-нибудь `__cxa_finalize` с нулевым указателем на практике?C++

Программы на C++. Форум разработчиков
Anonymous
Вызывается ли когда-нибудь `__cxa_finalize` с нулевым указателем на практике?

Сообщение Anonymous »

Программа C++, созданная с помощью GCC, обычно вызывает __cxa_finalize для каждой разделяемой библиотеки в порядке, обратном инициализации, например, при выходе из программы, чтобы уничтожить глобальные переменные и статические локальные функции. Предоставление аргумента __dso_handle гарантирует, например, что локальная статика функции будет уничтожена для каждой общей библиотеки. (Это немного удивительно, поскольку они уничтожаются только в обратном порядке инициализации внутри одной библиотеки, но не в общих библиотеках.)
https://elixir.bootlin.com/glibc/glibc- ... lize.c#L44

Код: Выделить всё

   [...] GCC
calls the glibc variant directly from its CRT files, from an ELF
destructor.  this call always passes a non-null D argument.
[...]
ABI Itanium C++ также предлагает возможность вызова __cxa_finalize(nullptr), который очищает все глобальные переменные и локальную для функции статику. Для статики, локальной для функции, это приведет к другому порядку уничтожения, поскольку теперь они будут уничтожаться в порядке, обратном инициализации, даже в общих библиотеках.
Меня немного беспокоят два разных порядка уничтожения. Есть ли случаи, когда на практике вызывается __cxa_finalize(nullptr)?

Подробнее здесь: https://stackoverflow.com/questions/798 ... n-practice

Вернуться в «C++»