std::at_quick_exit
ja.cppreference.net より
| ヘッダ <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 が指す関数を、プログラムの quick 終了時(std::quick_exit 経由)に呼び出されるよう登録します。
複数のスレッドからこの関数を呼び出してもデータ競合は発生しません。実装は少なくとも 32 個の関数の登録をサポートすることが保証されています。正確な上限は処理系定義です。
登録された関数は、通常のプログラム終了では呼び出されません。その場合に関数を呼び出す必要がある場合は、std::atexit を使用しなければなりません。
パラメータ
| func | - | プログラムの高速終了時に呼び出される関数へのポインタ |
戻り値
0 登録が成功した場合は0、それ以外の場合は0以外の値。
注記
これら2つのオーバーロードは区別されます。なぜなら、パラメータ
func
の型が異なるためです(
language linkage
はその型の一部です)。
例
このコードを実行
#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ドキュメント
for
at_quick_exit
|
|