• ベストアンサー

operator演算子のnewオーバーロード

こんばんは。 C++言語の勉強をしています。 new演算子をオーバーロードしたいのですが、引数としてvoid*を渡したかったのですが、 エラーC2821が出力されてできませんでした。 エラー内容が第一引数がsize_tでなければならない理由が分からない ので質問しました。 ご教授お願いします。

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

  • ベストアンサー
回答No.3

演算子の場合、少々特殊な事情がありますから。 たとえば、演算子 new は、 Foo *aFoo = new foo(); という形の使い方をします。 これを、内部的には、 Foo *aFoo = new(sizeof(Foo)); という形で呼び出します。 というわけで、普通の関数は、定義したそのままの形で使いますが、演算子の場合、ソース上の記述と、それを、オーバーロードされた関数としてみたときの形が異なります。 new の場合、上記のように変形されることを前提として使用しますから、最初の引数は、size_t でないと困るわけです。

DEADSPACE566
質問者

お礼

懇切丁寧な説明でとても助かりました。 最初の引数はsize_tでなければならない理由 はそういうことだったんですね。 operator演算子に対しての勉強をもっとしっかり やっておこうと思います。

その他の回答 (2)

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

そう「しなきゃならない」って解釈してください.

DEADSPACE566
質問者

補足

確かにそうですね。

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

規格にそう書いてあるから.

DEADSPACE566
質問者

補足

そうなんですよね。 規格としてそうしてください。 とあります。 第一引数として、newでメモリの大きさを指定するため?のsize_tを指定しないと駄目ってことだと思うのですが。 そうしてくださいという解釈でいいんでしょうかね。

関連するQ&A