std::at_quick_exit
Определён в заголовочном файле <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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/program/at_quick_exit