• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:new演算子のオーバーロードについて)

new演算子のオーバーロードについて

このQ&Aのポイント
  • #include <stdio.h> #include <windows.h> class MyNew { public: void* ptr; MyNew( void* p ) { ptr = p; }void* MyNew::operator new( size_t size ) { printf("new-\n"); return malloc( size ); }void MyNew::operator delete( void* ptr ) { printf("delete-\n"); free( ptr ); }};void main( void ) { MyNew p = new int; }
  • クラスのメモリ確保をnew演算子のオーバーロードを用いて書いてみたのですがオーバーロードしたnew演算子が呼ばれません。なぜでしょうか?
  • VisualStdio2005コンソールアプリケーション WindowsXP

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

MyNew::operator new を使うのは、「new でクラス MyNew (やそれを継承しながら独自に operator new を定義していないクラス) のオブジェクトを作るとき」です。今の例では「new で作っているオブジェクト」が int ですから、MyNew::operator new ではなく ::operator new が使われます。 これに対し MyNew *p = new MyNew(new int); // #2 だと ・int 型のオブジェクトを作るときに ::operator new が、 ・MyNew 型のオブジェクトを作るときに MyNew::operator new が それぞれ呼び出されます。 MyNew::operator delete を呼ぶ時も同じで、「MyNew (とそれを継承しているが独自に operator delete を定義していないクラス) のオブジェクト (へのポインタ) を delete するときに呼び出されます。つまり上の #2 の場合に delete p; を実行すると、MyNew::operator delete が実行されます。

0xEF
質問者

お礼

丁寧な回答ありがとうございます。 なるほど、かんがえ方が間違えていたようですね。 また一つ賢くなることができました。 ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

MyNew::operator new がどんなときに使われるのか、理解できてますか?

0xEF
質問者

お礼

回答ありがとうございます。 言われてみると理解できていません。 よろしければご教授願います。

関連するQ&A