Namespaces
Variants

std::at_quick_exit

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

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
ヘッダ <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