std::abort
Материал из cppreference.com
| Определён в заголовочном файле <cstdlib>
|
||
| [[noreturn]] void abort(); |
(начиная с C++11) | |
| void abort(); |
(до C++11) | |
Приводит к нештатному завершению программы, если не был перехвачен сигнал SIGABRT с помощью обработчика сигналов.
Деструкторы для переменных с автоматическим, потоковым (thread_local) и статическим длительностью хранилища не вызываются. Также не вызывается функция, переданная в std::atexit() Тем не менее закрытие открытых ресурсов, таких как файлов, зависит от реализации. Зависимый от реализации код, соответствующий неудачному выполнению программы, возвращается в среду её выполнения.
Содержание |
[править] Параметры
(Нет)
[править] Возвращаемое значение
(Нет)
[править] Исключения
спецификация noexcept:
noexcept
[править] Пример
Запустить этот код
#include <csignal> #include <iostream> #include <cstdlib> class Tester { public: Tester() { std::cout << "Вызов конструктора\n"; } ~Tester() { std::cout << "Вызов деструктора\n"; } }; Tester static_tester; // Деструктор не будет вызван void signal_handler(int signal) { if (signal == SIGABRT) { std::cerr << "SIGABRT принят\n"; } else { std::cerr << "Неожиданный сигнал принят: " << signal << "\n"; } std::_Exit(EXIT_FAILURE); } int main() { Tester automatic_tester; // Деструктор не будет вызван // Установка обработчика сигналов auto previous_handler = std::signal(SIGABRT, signal_handler); if (previous_handler == SIG_ERR) { std::cerr << "Установка сигнала неудачна\n"; return EXIT_FAILURE; } std::abort(); //Аварийный выход из программы std::cout << "Этот код не достижим\n"; }
Вывод:
Вызов конструктора Вызов конструктора SIGABRT принят
[править] См. также
| Вызывает нормальное завершение программы с очисткой (функция) | |
| Регистрирует функцию, которая вызывается при вызове exit() (функция) | |
| (C++11) |
Вызывает нормальное завершение программы без полной очистки (функция) |
| Справка по C — abort
| |

