set_new_handler() -- new 障害のための振る舞いのセット

C++new 演算子が新しいオブジェクトを作成すると、この演算子は、operator new() また は operator new[]() 関数 を呼び出して、必要なストレージを獲得します。

new は、新しいオブジェクトを作成するためのストレージを割り振りできないときに は、set_new_handler() への呼び出しに よって new ハンドラー 関数 (インストールされている場合) を 呼び出します。std::set_new_handler() 関数は、ヘッダー <new> で宣言されます。 この関数を使用して、定義済みの new ハンドラーまたは デフォルトの new ハンドラーを呼び出します。

new ハンドラーは、次のうちのどれかを実行する必要があります。

set_new_handler() 関数には、以下のプロトタイプがあります。

typedef void(*PNH)();
PNH set_new_handler(PNH);

set_new_handler() は、引き数として関数 (new ハンドラー) を指すポインターを取ります。 この関数には引き数がなく、void を戻します。set_new_handler() は、直前の new ハンドラー関数を 指すポインターを戻します。

独自の set_new_handler() 関数を指定しない場合は、 new は、型 std::bad_alloc の例外をスローします。

次のプログラムでは、new 演算子がストレージを割り振りできない場合に、 set_new_handler() を使用してメッセージを戻す方法を示します。

#include <iostream>
#include <new>
#include <cstdlib>
using namespace std;
 
void no_storage()
{
    std::cerr << "Operator new failed: no storage is
    available.¥n";
      std::exit(1);
}
int main(void)
{
     std::set_new_handler(&no_storage);
   // Rest of program ...
}

new がストレージを割り振りできないためにプログラムが失敗した場合は、プログラ ムは次のメッセージを出して終了します。

 Operator new failed:
no storage is available.

関連参照

IBM Copyright 2003