set_new_handler() - set_new_handler() 用の関数の登録

標準

標準/拡張機能 C/C++ 依存項目
ISO/ANSI C++ C++ のみ  

形式

#include <new>

new_handler set_new_handler(new_handler ph) throw();

機能説明

set_new_handler() 関数は、z/OS® XL C++ エラー処理メカニズムの一部です。set_new_handler() によって新規ハンドラー関数が登録済みの場合、その新規ハンドラー関数をストレージに割り振ることができない場合には、new 演算子によって呼び出されることになります。 新規ハンドラー関数を登録していなかった場合、デフォルトの動作として、新規オペレーターは NULL を戻します。

set_new_handler() に与えられる引数は、ヘッダー <new> に定義される、型 new_handler によるものです (つまり、void 戻り型の関数、および引数なしの関数へのポインター)。

NOXPLINK でコンパイルされる C++ アプリケーションについては、新規ハンドラー関数のアドレスを含む変数が、実行可能モジュールに静的にバインドされます。つまり、各実行可能モジュールは、その実行可能モジュールの一部としてリンク・エディットされた他の関数だけが共有する、独自の新規ハンドラー関数を持つことになります。これは、複数のスレッドが同じ実行可能モジュールを使用している場合にも当てはまります。したがって、set_new_handler() を非 XPLINK DLL 内から実行することは、新規ハンドラー関数をその DLL の外部で起動する場合には、できないことになります。

XPLINK でコンパイルされた C++ アプリケーションについては、新規ハンドラー関数は、完全にグローバルであるため、DLL の制限はありません。XPLINK 実行可能モジュールで構成されるマルチスレッド環境では、set_new_handler() の呼び出しによって作成された新規ハンドラー関数が、やはり、(POSIX) プロセスのすべてのスレッドに適用されます。

新規ハンドラーに要求される動作は、以下のいずれかの操作を実行することです。
  • 割り振りのために使用可能なストレージを増やして、戻ります。
  • abort() または exit() のいずれかを呼び出します。
  • 型 bad_alloc のオブジェクトをスローします。

戻り値

型 new_handler の値を戻します。 指し示される関数は、直前に set_new_handler() 関数によって呼び出された関数ですが、新規ハンドラー関数が確立されていなかった場合は、NULL になります。

新しい演算子と set_new_handler() 関数を含む z/OS XL C++ エラー処理については、「z/OS XL C/C++ ランゲージ・リファレンス」を参照してください。

関連情報