Namespaces
Variants

std:: at_quick_exit

From cppreference.net
Utilities library
ヘッダーで定義 <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 が指す関数を、クイックプログラム終了時( 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