Namespaces
Variants

std:: at_quick_exit

From cppreference.net
Utilities library
Определено в заголовочном файле <cstdlib>
int at_quick_exit ( /*atexit-handler*/ * func ) noexcept ;
int at_quick_exit ( /*c-atexit-handler*/ * func ) noexcept ;
(1) (начиная с C++11)
extern "C++" using /*atexit-handler*/ = void ( ) ;
extern "C" using /*c-atexit-handler*/ = void ( ) ;
(2) ( только для демонстрации* )

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

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

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

Содержание

Параметры

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

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

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

Примечания

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

Пример

#include <cstdlib>
#include <iostream>
void f1()
{
    std::cout << "pushed first" << std::endl; // flush is intentional
}
extern "C" void f2()
{
    std::cout << "pushed second\n";
}
int main()
{
    auto f3 = []
    {
        std::cout << "pushed third\n";
    };
    std::at_quick_exit(f1);
    std::at_quick_exit(f2);
    std::at_quick_exit(f3);
    std::quick_exit(0);
}

Вывод:

pushed third
pushed second
pushed first

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

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