operator new という演算子を取り扱っているプログラムで
私が誤解しているのかもしれませんが、私は、
「new は演算子であり、operator new は関数である」と認識しています。
すなわち、operator new は演算子ではない。
operator new は void * operator new(size_t); と定義されていて、
サイズを渡せばメモリ領域を確保してそのアドレスを返すだけの関数です。
例えば、次のように実装されているものと思っています。
C++
1void* operator new(size_t n)
2{
3 void* p = malloc(n);
4 if (p == nullptr) throw std::bad_alloc();
5 return p;
6}
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 * ではありません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 06:49