◐ Shell
clean mode source ↗

std::at_quick_exit — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <cstdlib>

int at_quick_exit( /*atexit-обработчик*/* func ) noexcept; int at_quick_exit( /*c-atexit-обработчик*/* func ) noexcept;

(1) (начиная с C++11)

extern "C++" using /*atexit-обработчик*/ = void(); extern "C" using /*c-atexit-обработчик*/ = void();

(2) (только для пояснения*)

Регистрирует указатель на функцию func для того, чтобы она была вызвана при быстром завершении программы (с помощью std::quick_exit).

Вызов этой функции из нескольких потоков не приведёт к гонке данных. Реализация гарантированно поддерживает регистрацию не менее 32 функций. Точный предел определяется реализацией.

Зарегистрированные функции не будут вызваны при обычном завершении программы. Чтобы они были вызваны в этом случае, нужно воспользоваться std::atexit.

Параметры

func указатель на функцию, которая будет вызвана при быстром завершении программы.

Возвращаемое значение

0, если регистрация прошла успешно, иначе ненулевое значение.

Примечание

Две перегрузки различны, потому что типы параметра func различны (языковое связывание является частью его типа)

Пример

#include <cstdlib>
#include <iostream>

void f1()
{
    std::cout << "назначена первой" << std::endl; // принудительный сброс
}

extern "C" void f2()
{
    std::cout << "назначена второй\n";
}

int main()
{
    auto f3 = []
    {
        std::cout << "назначена третьей\n";
    };

    std::at_quick_exit(f1);
    std::at_quick_exit(f2);
    std::at_quick_exit(f3);
    std::quick_exit(0);
}

Вывод:

назначена третьей
назначена второй
назначена первой

Смотрите также

вызывает аварийное завершение программы (без очистки)
(функция) [править]
вызывает нормальное завершение программы с очисткой
(функция) [править]
регистрирует функцию, которая будет вызываться при вызове std::exit()
(функция) [править]
вызывает быстрое завершение программы без полной очистки
(функция) [править]