C++ 移行ガイド

置き換え関数

別の形式の operator newoperator delete を使用している場合、その関数は、例外の指定を含めて前述の例と同じ識別形式である必要があります。また、実装されている意味も同じである必要があります。通常の形式の operator new では、失敗時に bad_alloc 例外を送出する必要があります。これに対して nothrow 形式では、失敗時に例外を送出せずに、ゼロを返す必要があります。operator delete では、どの形式についても、例外を送出してはいけません。標準ライブラリのコードでは、大域的な operator newoperator delete が使用されており、コードが正しく実行されるかどうかは、その動作に依存します。他社のライブラリについても、同様の依存関係が存在する可能性があります。

C++ 5.0 の実行時ライブラリの大域形式の operator new[]() は、C++ 標準で規定されているように、単一オブジェクト形式の operator new() を呼び出すだけです。C++ 5.0 の標準ライブラリの大域形式の operator new() を置き換える場合、大域形式の operator new[]() を置き換える必要はありません。

C++ 標準では、あらかじめ定義されている、以下の「配置」形式の operator new の置き換えを禁止しています。

void* operator new(std::size_t, void*) throw();

void* operator new[](std::size_t, void*) throw();

上記の置き換えは、4.2 コンパイラでは許可されますが、C++ 5.0 標準モードでは置換できません。4.2コンパイラでは、別のパラメータリストを使用して独自の置き換えを記述することもできます。