std::abort
提供: cppreference.com
ヘッダ <cstdlib> で定義
|
||
void abort(); |
(C++11未満) | |
[[noreturn]] void abort() noexcept; |
(C++11以上) | |
std::signal に渡されたシグナルハンドラによって SIGABRT がキャッチされそのハンドラが戻らない場合を除き、プログラムを異常終了させます。
自動、スレッドローカル (C++11以上)および静的記憶域期間を持つ変数のデストラクタは呼ばれません。 std::atexit() および std::at_quick_exit (C++11以上) で登録された関数も呼ばれません。 ファイルのような開いているリソースが閉じられるかどうかは処理系定義です。 実行の失敗を表す処理系定義のステータスがホスト環境に返されます。
目次 |
[編集] 引数
(なし)
[編集] 戻り値
(なし)
[編集] 例外
(なし)
[編集] ノート
POSIX は abort() 関数が SIGABRT シグナルのブロックおよび無視をオーバーライドすると 規定しています。
[編集] 例
Run this code
#include <csignal> #include <iostream> #include <cstdlib> class Tester { public: Tester() { std::cout << "Tester ctor\n"; } ~Tester() { std::cout << "Tester dtor\n"; } }; Tester static_tester; // Destructor not called void signal_handler(int signal) { if (signal == SIGABRT) { std::cerr << "SIGABRT received\n"; } else { std::cerr << "Unexpected signal " << signal << " received\n"; } std::_Exit(EXIT_FAILURE); } int main() { Tester automatic_tester; // Destructor not called // Setup handler auto previous_handler = std::signal(SIGABRT, signal_handler); if (previous_handler == SIG_ERR) { std::cerr << "Setup failed\n"; return EXIT_FAILURE; } std::abort(); // Raise SIGABRT std::cout << "This code is unreachable\n"; }
出力:
Tester ctor Tester ctor SIGABRT received
[編集] 関連項目
クリーンアップをしてプログラムを正常終了させます (関数) | |
std::exit が呼ばれたときに呼ばれる関数を登録します (関数) | |
(C++11) |
完全なクリーンアップをせずにプログラムを素早く終了させます (関数) |
(C++11) |
quick_exit が呼ばれた時に呼ばれる関数を登録します (関数) |
特定のシグナルに対するシグナルハンドラを設定します (関数) | |
abort の C言語リファレンス
|