名前空間
変種
操作

std::atexit

From cppreference.com
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
ヘッダ <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 の呼び出しより先に行われます。静的オブジェクトのコンストラクタと atexit の呼び出しの順序についても同様です。詳細は std::exit を参照してください。

(C++11まで)

関数は、静的記憶域期間を持つオブジェクトの破棄や、他の関数と並行して呼び出される可能性があります。ただし、A の登録が B の登録より前に順序付けられている場合、B の呼び出しが A の呼び出しより前に順序付けられるという保証が維持されます。静的オブジェクトのコンストラクタと atexit の呼び出しの順序付けについても同様です。詳細は std::exit を参照してください。

(C++11以降)

同じ関数を複数回登録できます。

関数が例外をスローして終了した場合、std::terminate が呼び出されます。

atexit はスレッドセーフです。複数のスレッドからこの関数を呼び出しても、データ競合は発生しません。

実装では、少なくとも 32 個の関数の登録がサポートされることが保証されています。正確な制限は実装定義です。

目次

[編集] パラメータ

func - 正常なプログラム終了時に呼び出される関数へのポインタ

[編集] 戻り値

0 登録が成功した場合、それ以外の場合は非ゼロの値。

[編集]

2つのオーバーロードは、パラメータ func の型が異なるため(言語リンケージはその型の要素です)、区別されます。

[編集]

#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

[編集] 関連項目

(クリーンアップせずに)異常なプログラム終了を引き起こす
(関数) [編集]
クリーンアップを伴う通常のプログラム終了を引き起こす
(関数) [編集]
完全なクリーンアップを行わずに、高速なプログラム終了を引き起こす
(関数) [編集]
std::quick_exit の呼び出し時に呼ばれる関数を登録する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)