演算子のオーバーロードの引数リストが体系的な方法でどのように決定されるかを完全に理解したことはありません。特に、現在の問題に混乱しています。
単項演算子をオーバーロードすると、引数が1つ、またはクラスメンバーの場合はゼロになります。二項演算子をオーバーロードすると、2つの引数があり、クラスメンバーの場合は1つの引数があります。少なくとも、それが機能しているように見える方法です。operator new
ただし、(クラスメンバーではなく)問題が発生しています。
私が作業しているコードベースには、過去に見た他の場所(たとえばここなど)と同様に、メモリデバッグ用#define new new(__FILE__, __LINE__)
の署名などを使用したdefinelikeおよび対応する関数があります。void *new(size_t size, const char *file, unsigned line)
私のプロジェクトのものは、実際には以前にリンクされたものとは異なることに注意してください。何らかの理由で新しい配置を台無しにしているので、これは私にとって問題を提示します。私はC++プログラミング言語を調べましたが、それがこれを説明しているのなら、私はそれを見逃しています。
new
この点で特別ですか?つまり、特定の言語で定義された追加のデバッグ署名がありますか?上で述べたように、場所によってわずかに異なる署名が表示されているため、そのようには見えません。もしそうなら、他のどの演算子が非自明な署名を持っていますか、そしてそれらは何ですか?これらのさまざまな署名は、代わりにいくつかの実装固有の追加機能ですか?もしそうなら、ほとんどの実装が何をするかについての一般的なルールはありますか?あるいは、それは私が私のタイトルで暗示したようなアリティの問題ですか?署名で必要な数の追加の引数を追加するnew
ことができますか?キーワード自体と必要な新しい型の間の引数を使用してnewを呼び出す場合は、何でもできますか?それとも私はさらに混乱していて、他に何か足りないものがありますか?
最も重要なのは、短期的には(私はこれを本当に理解したいのですが)、何が私の配置を台無しにしているのnew
でしょうか?マクロがのような展開を引き起こしていnew ("file.cpp", 100) (class_pointer) class_t
ます。括弧内の2つのグループの問題は多分、それとも何か他のものですか?