std:: atexit
|
定義済みヘッダー
<cstdlib>
|
||
| (1) | ||
|
int
atexit
(
/* c-atexit-handler */
*
func
)
;
int atexit ( /* atexit-handler */ * func ) ; |
(C++11以前) | |
|
int
atexit
(
/* c-atexit-handler */
*
func
)
noexcept
;
int atexit ( /* atexit-handler */ * func ) noexcept ; |
(C++11以降) | |
|
extern
"C"
using
/* c-atexit-handler */
=
void
(
)
;
extern "C++" using /* atexit-handler */ = void ( ) ; |
(2) | ( 説明専用* ) |
func が指す関数を、通常のプログラム終了時( std::exit() の呼び出し、または main関数 からの戻り)に呼び出されるよう登録します。
|
これらの関数は静的オブジェクトの破棄中に逆順で呼び出される:AがBより前に登録された場合、Bの呼び出しはAの呼び出しより前に実行される。静的オブジェクトコンストラクタと
|
(C++11まで) |
|
これらの関数は静的ストレージ期間を持つオブジェクトの破棄と並行して、また互いに並行して呼び出される可能性があるが、Aの登録がBの登録より前に順序付けられている場合、Bの呼び出しはAの呼び出しより前に順序付けられるという保証は維持される。静的オブジェクトコンストラクタと
|
(C++11以降) |
同じ関数が複数回登録される場合があります。
関数が例外によって終了する場合、 std::terminate が呼び出されます。
atexit
はスレッドセーフです:複数のスレッドからこの関数を呼び出してもデータ競合は発生しません。
実装は少なくとも32個の関数の登録をサポートすることが保証されています。正確な制限は実装定義です。
目次 |
パラメータ
| func | - | 正常なプログラム終了時に呼び出される関数へのポインタ |
戻り値
0 登録が成功した場合は0、それ以外の場合は0以外の値。
注記
これら2つのオーバーロードは区別されます。なぜなら、パラメータ func の型が異なるためです( language linkage はその型の一部です)。
例
#include <cstdlib> #include <iostream> void atexit_handler_1() { std::cout << "At exit #1\n"; } void atexit_handler_2() { std::cout << "At exit #2\n"; } int main() { const int result_1 = std::atexit(atexit_handler_1); const int result_2 = std::atexit(atexit_handler_2); if (result_1 || result_2) { std::cerr << "Registration failed!\n"; return EXIT_FAILURE; } std::cout << "Returning from main...\n"; return EXIT_SUCCESS; }
出力:
Returning from main... At exit #2 At exit #1
関連項目
|
異常なプログラム終了を引き起こす(クリーンアップなし)
(関数) |
|
|
クリーンアップを行った正常なプログラム終了を引き起こす
(関数) |
|
|
(C++11)
|
完全なクリーンアップなしで高速なプログラム終了を引き起こす
(関数) |
|
(C++11)
|
std::quick_exit
呼び出し時に実行される関数を登録する
(関数) |
|
Cドキュメント
for
atexit
|
|