Microsoft ランタイム ライブラリは、割り当て関数のデバッグ バージョンを提供します。C++ の場合、これは署名付きの演算子 new のデバッグ バリアントです。
void *operator new(size_t size, int blockType, const char *filename, int linenumber);
マクロは次のように定義されます
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
すべての割り当てを計測するために、通常は次のように定義します
#if defined DEBUG_NEW
#define new DEBUG_NEW
#endif
ただし、この定義は、placement new を使用するすべての場所を壊します。これは、2 つの引数セットが構文エラーになるためです。これで、コード内のいくつかの使用法を簡単に処理できるようになりましたが、標準ライブラリとブーストはいたるところに新しい配置を使用しています。したがって、これをグローバルに定義すると、定義の前に多くのものを含めることになり、コンパイルが遅くなります。
では、placement new が含まれているという理由だけで、すべてのファイルに上記の最後の定義を配置したり、手動で DEBUG_NEW を記述したりする必要なく、ヘッダーを取得せずにコードで割り当てを計測する方法はありますか?