Вызывается ли когда-нибудь `__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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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