New演算子
new[]演算子関数がnew演算子関数と分かれている理由は、『C++の設計と進化』によれば、型Tの配列はTのオブジェクトではないという方針により、Tの配列を確保するためにTのnew演算子関数を使うわけには行かないと考えられたためである。そこで別途new[]演算子関数を設けることにしたのである (§10.3)。
なお、new T[n]としたとき、new[]演算子関数にはsizeof (T) * nよりも大きい値が引数に渡される可能性がある。これは、主にdelete[]で解放するときにデストラクタを呼ぶ回数(配列の要素数)を記録するためなどといった理由によるものである。
また、newとnew[]演算子関数は、クラスの外、名前空間内にも定義でき、new及びnew[]演算子関数が定義されていないクラスとその他の型では、名前探索を行って記憶域の確保に用いるnewないしnew[]演算子関数を決定する。このため、大域名前空間にはデフォルトのnewとnew[]演算子関数が定義されており、標準C++ライブラリの中で唯一の大域名前空間で定義された関数となっており、ヘッダ<new>に宣言が置かれている。一方で、この大域名前空間のnew、new[]演算子関数はプログラム内で定義を与えることも可能で、そうした場合、処理系の用意した定義に代わってプログラム内の定義が用いられる (X3014 17.