ゲームエンジンをJavaからC++に移植中です。私は今、メモリ管理について心配する必要があるので、カスタムメモリアロケータについて多くの研究を行ってきました。このトピックについて私が読んだすべての記事には、new
anddelete
演算子をオーバーロードする必要があると書かれています。ただし、これらのオーバーロードされた演算子は通常、メモリ割り当てを処理するカスタム関数に委任して呼び出すだけです。さらに、次のようなマクロが一般的に使用されます。
#define New(className, size, description) customNew(className, size, description, __FILE__, __LINE__)
new
オーバーロードされた演算子を使用することはなく、カスタムメソッドを呼び出すだけです。ファイル名と行番号をうまく取得できるので、マクロがどのように役立つかは理解していますが、なぜオーバーロードするnew
のか、コードでは演算子ではなくdelete
マクロを使用するだけです。New
new
また、カスタムアロケータが説明、ファイル名、行番号などの追加情報を知りたい場合は、デフォルトをオーバーライドする(オーバーロードしない)ことはやや無意味に思えます。の標準的な呼び出しに関する情報を知ることはできず、意味のある方法でnew
それを私たちに委任することもできません。customNew
これらの演算子をオーバーロードしてオーバーライドすることの大きなメリットが何であるかがわかりません。
私には、次のように呼びかけているようです。
customNew(className, size, desc, file, line);
オーバーロードを呼び出すよりも直感的ですnew
:
new (size, desc, file, line) className();
最後に、オーバーライドしてオーバーロードする場合、それを行うのに最適な場所はどこですか?クラスごとにそれを行うことは、厄介な退屈です。名前空間で実行できますか?サブシステムごとに別々のプロジェクトを作成して、それらを個別に保守できるようにする予定です。プロジェクト全体、そしてゲームのプロジェクト内でのオーバーライドとオーバーロードをどのように促進しますか?私のC++n00bishnessを許してください。久しぶりです。