- ベストアンサー
※ 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
- みんなの回答 (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 が実行されます。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
MyNew::operator new がどんなときに使われるのか、理解できてますか?
質問者
お礼
回答ありがとうございます。 言われてみると理解できていません。 よろしければご教授願います。
お礼
丁寧な回答ありがとうございます。 なるほど、かんがえ方が間違えていたようですね。 また一つ賢くなることができました。 ありがとうございました。