次の宣言があります。
void * operator new (size_t s, PersistentMemory * m) throw()
{return m->allocatePersistentMemory(s);}
起動時にメモリの枯渇をテストしています。その結果、m->allocatePersistentMemory(s);
0 が返されます。次に、New は、null ポインターを使用してコンストラクターを呼び出します。this
ただし、C++ 2003 標準の 3.7.3.1 パラグラフ 3 に基づくと、次のようになります。
ストレージの割り当てに失敗した割り当て関数は、現在インストールされている new_handler (18.4.2.2) があればそれを呼び出すことができます。[注: プログラムが提供する割り当て関数は、set_new_handler 関数 (18.4.2.3) を使用して、現在インストールされている new_handler のアドレスを取得できます。] 空の例外仕様 (15.4) で宣言された割り当て関数 throw() がストレージの割り当てに失敗した場合、null ポインターを返す必要があります。ストレージの割り当てに失敗したその他の割り当て関数は、クラス std::bad_alloc (18.4.2.1) または std::bad_alloc から派生したクラスの例外をスローすることによってのみ、失敗を示します。
私が物事を理解する方法は、null を返すと、コンストラクターを呼び出さずm->allocatePersistentMemory(s)
に全体が null を返すことになるということです。operator new() throw()
これをオーバーライドする他の条件が他にありませんか?
ありがとう!