質問: static_cast(::operator new(sizeof(int))); このようなサンプルがありました (operator newに関しては未定義) ここでoperator new の前に ::をもってくるのはどんな意味があるのか またなぜ new だけだはなくnewの前にoperatorがくっついているのか(好みの問題??) 以上2点について回答いただけたらと思っております!
回答: > > operator new という演算子を取り扱っているプログラムで > > > 私が誤解しているのかもしれませんが、私は、 「new は演算子であり、operator new は関数である」と認識しています。 すなわち、operator new は演算子ではない。 operator new は void * operator new(size_t); と定義されていて、 サイズを渡せばメモリ領域を確保してそのアドレスを返すだけの関数です。 例えば、次のように実装されているものと思っています。 ``` void* operator new(size_t n) { void* p = malloc(n); if (p == nullptr) throw std::bad_alloc(); return p; } ``` int *p = new int; または int *p = new int(); は正しいけれど、 int *p = oprator new int または int *p = operator new(int); はエラーです。 また、oprator new(sizeof(int)) は正しいけれど、 new(sizeof(int)) はエラーです。 operator new は関数です。 一方 new は演算子で、型名にこれを適用すると、 operator new 関数でメモリ領域を確保し、 さらにその型にコンストラクタがあればそれを呼び出します。 そして、演算結果は「その型へのポインタ」です。void * ではありません。