アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

ご教授お願いします。

A 回答 (3件)

演算子の場合、少々特殊な事情がありますから。



たとえば、演算子 new は、

Foo *aFoo = new foo();

という形の使い方をします。
これを、内部的には、

Foo *aFoo = new(sizeof(Foo));

という形で呼び出します。
というわけで、普通の関数は、定義したそのままの形で使いますが、演算子の場合、ソース上の記述と、それを、オーバーロードされた関数としてみたときの形が異なります。

new の場合、上記のように変形されることを前提として使用しますから、最初の引数は、size_t でないと困るわけです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/07/08 17:07

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

この回答への補足

確かにそうですね。

補足日時:2014/07/08 00:48
    • good
    • 0

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

この回答への補足

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

補足日時:2014/07/07 22:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!