New演算子
4.3.4)。
::new Tのように、new、new[]に::を前置すると、大域名前空間のnew、new[]演算子関数で記憶域の確保することを強制できる (X3014 5.3.4 9)。この場合、解放には::delete、::delete[]を使用する必要がある。
ちなみに、初期のC++では記憶域の確保と初期化が分離しておらず、クラス型に対するnewで独自の記憶域の確保方法を用いるには、コンストラクタ内で、thisへ代入を行うという構文を用いていた (D&E 3.9)。
既定のnew演算子関数
大域名前空間のnew及びnew[]演算子関数がプログラムによって定義されなかった場合に用いられる既定の実装は、次のような動作を行う (X3014 18.4.1.1)。
次の内容のループを行う。 何らかの方法で記憶域確保を試みる。 成功すればそれを返すことで関数を抜ける。 失敗した場合、newハンドラが登録されているか確認する。 登録されていたら、そのnewハンドラを呼び出す。 newハンドラが登録されていなければ、std::bad_alloc型のインスタンスが例外として投げられる。