名前空間
変種
操作

std::at_quick_exit

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> で定義
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() の呼び出し時に呼ばれる関数を登録する
(関数) [編集]
完全なクリーンアップを行わずに、高速なプログラム終了を引き起こす
(関数) [編集]
at_quick_exit のための C ドキュメント
English 日本語 中文(简体) 中文(繁體)