std::at_quick_exit
From cppreference.com
| ヘッダ <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) | (説明用*) |
プログラムの高速終了時(std::quick_exit 経由)に呼び出される、func が指す関数を登録します。
複数のスレッドからこの関数を呼び出しても、データ競合は発生しません。実装は、少なくとも32個の関数の登録をサポートすることが保証されています。正確な制限は実装定義です。
登録された関数は、通常のプログラム終了時には呼び出されません。その場合に呼び出される必要のある関数には、std::atexit を使用する必要があります。
目次 |
[編集] パラメーター
| func | - | プログラムの高速終了時に呼び出される関数へのポインター |
[編集] 戻り値
登録が成功した場合は 0、それ以外の場合は非ゼロ値。
[編集] 備考
2つのオーバーロードは、パラメーター 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) |
完全なクリーンアップを行わずに、高速なプログラム終了を引き起こす (関数) |
| at_quick_exit のための C ドキュメント
| |