Пространства имён
Варианты
Действия

std::at_quick_exit

Материал из cppreference.com
< cpp‎ | utility‎ | program
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и ти��а
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Утилиты поддержки программ
Прерывание программы
(C++11)
(C++11)
at_quick_exit
(C++11)
Недостижимый поток управления
Взаимодействие с окружением
Сигналы
Типы сигналов
Нелокальные переходы
Типы
 
Определено в заголовочном файле <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()
(функция) [править]
вызывает быстрое завершение программы без полной очистки
(функция) [править]
Документация C по at_quick_exit