グローバルとしてパラメーターを使用して演算子 new を実装しようとしています。args なしの new をオーバーロードしても問題ありませんが、コンパイルしようとすると次のようなエラーが発生します。
inline void* operator new(size_t, void* p) {
//...
return p;
}
c:\bjarne_exercise_6.cpp(14): エラー C2084: 関数 'void *operator new(size_t,void *) throw()' には既に本体があります c:\program files\microsoft visual studio 10.0\vc\include\new( 55) : 「新しい」の以前の定義を参照してください
c:\bjarne_exercise_6.cpp(40): エラー C2264: 'operator new': 関数の定義または宣言にエラーがあります。関数が呼び出されない
これを解決したところです。#include stdafx.h の前にこれを宣言する必要があります。いいえ、そうではありません。それはうまくコンパイルされますが、まだこの関数は呼び出されませんが、新しいヘッダーファイルからのバージョンです。これは、新しい配置 (2 つのパラメーターを使用) が新しいヘッダーで既に定義されているためです。通常の new (size_t パラメーターが 1 つだけ) はそこでのみ宣言されているため、引き続きオーバーロードできます。したがって、複数のパラメーターを持つ特別な new が必要な場合は、以下の @trion によって提案されたソリューションが適切です。