Namespaces
Variants

std:: _Exit

From cppreference.net
Utilities library
ヘッダー <cstdlib> で定義
[ [ noreturn ] ] void _Exit ( int exit_code ) noexcept ;
(C++11以降)

リソースを完全にクリーンアップせずに通常のプログラム終了を発生させます。

自動記憶域期間、スレッドローカル記憶域期間、静的記憶域期間を持つ変数のデストラクタは呼び出されません。 std::at_quick_exit() または std::atexit() に渡された関数は呼び出されません。ファイルなどのオープンされたリソースがクローズされるかどうかは実装定義です。

exit_code 0 または EXIT_SUCCESS の場合、正常終了を示す実装定義のステータスがホスト環境に返されます。 exit_code EXIT_FAILURE の場合、 異常終了 を示す実装定義のステータスが返されます。それ以外の場合、実装定義のステータス値が返されます。

フリースタンディング実装は std::_Exit を提供することが要求される。

(C++23以降)

目次

パラメータ

exit_code - プログラムの終了ステータス

戻り値

(なし)

注記

C++23以降 _Exit はフリースタンディング実装が要求されますが、C言語のフリースタンディング実装では利用可能であることは要求されません。

#include <iostream>
class Static
{
public:
    ~Static() 
    {
        std::cout << "Static dtor\n";
    }
};
class Local
{
public:
    ~Local() 
    {
        std::cout << "Local dtor\n";
    }
};
Static static_variable; // このオブジェクトのデストラクタは呼び出され*ない*
void atexit_handler()
{
    std::cout << "atexit handler\n";
}
int main()
{
    Local local_variable; // このオブジェクトのデストラクタは呼び出され*ない*
    // ハンドラは呼び出され*ない*
    const int result = std::atexit(atexit_handler);
    if (result != 0)
    {
        std::cerr << "atexit registration failed\n";
        return EXIT_FAILURE;
    }
    std::cout << "test" << std::endl; // std::endlによるフラッシュ
        // ここにある必要がある。そうしないと何も出力されない
    std::_Exit(EXIT_FAILURE);
}

出力:

test

関連項目

異常なプログラム終了を引き起こす(クリーンアップなし)
(function)
クリーンアップを行った正常なプログラム終了を引き起こす
(function)