9

新しい演算子のオーバーロードについて理解できない点があります。クラス MyClass がまだ MyClass.h MyClass.cpp と main.cpp ファイルがあるとします。

//MyClass.h

class MyClass {
   public:
     //Some member functions
     void* operator new (size_t size);
     void operator delete (void* ptr);
     //...
};

//MyClass.cpp

void* MyClass::operator new(size_t size) {
   return malloc(size);
}

void MyClass::operator delete(void* ptr) {
   free(ptr);
}

//main.cpp

//Include files
//...

int main() {
   MyClass* cPtr = new MyClass();
   delete cPtr
} 

それぞれ。このプログラムは問題なく動作しています。ただし、理解できないのは、定義に「size_t size」のような関数パラメーターがあるのに、パラメーターなしで新しい演算子を呼び出すことができるのはなぜですか。ここで私が見逃している点はありますか? ありがとう。

4

3 に答える 3

0

コンパイラは、クラスのサイズを認識しています。基本的に、それはあなたの関数に渡さsizeof(MyClass)れますnew

于 2013-05-19T22:52:13.167 に答える