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 handlerauto previous_handler =std::signal(SIGABRT, signal_handler);if(previous_handler ==SIG_ERR){std::cerr<<"Setup failed\n";returnEXIT_FAILURE;} std::abort();// Raise SIGABRTstd::cout<<"This code is unreachable\n";}
出力:
Tester ctor Tester ctor SIGABRT received
[編集]関連項目
クリーンアップをしてプログラムを正常終了させます (関数) | |
std::exit が呼ばれたときに呼ばれる関数を登録します (関数) | |
(C++11) | 完全なクリーンアップをせずにプログラムを素早く終了させます (関数) |
(C++11) | quick_exit が呼ばれた時に呼ばれる関数を登録します (関数) |
特定のシグナルに対するシグナルハンドラを設定します (関数) | |
abort の C言語リファレンス |