- ベストアンサー
operator演算子のnewオーバーロード
こんばんは。 C++言語の勉強をしています。 new演算子をオーバーロードしたいのですが、引数としてvoid*を渡したかったのですが、 エラーC2821が出力されてできませんでした。 エラー内容が第一引数がsize_tでなければならない理由が分からない ので質問しました。 ご教授お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
演算子の場合、少々特殊な事情がありますから。 たとえば、演算子 new は、 Foo *aFoo = new foo(); という形の使い方をします。 これを、内部的には、 Foo *aFoo = new(sizeof(Foo)); という形で呼び出します。 というわけで、普通の関数は、定義したそのままの形で使いますが、演算子の場合、ソース上の記述と、それを、オーバーロードされた関数としてみたときの形が異なります。 new の場合、上記のように変形されることを前提として使用しますから、最初の引数は、size_t でないと困るわけです。
お礼
懇切丁寧な説明でとても助かりました。 最初の引数はsize_tでなければならない理由 はそういうことだったんですね。 operator演算子に対しての勉強をもっとしっかり やっておこうと思います。