プロジェクトのグローバルな new 演算子と delete 演算子をオーバーライドしましたが、Boost ライブラリですべてを機能させるのに問題があります。ここで解決策を実装しました:複数のオーバーロードで発生していた問題を回避するために、C++ 演算子 new を置き換えるマクロ。ただし、Boost ライブラリには、単純にプリプロセッサをそのままにして展開するのoperator new
ではなく、使用するという厄介な習慣があります。new
::operator new(n);
に:
::operator (__file__ = "someFile.cpp", __line__ = 123) && 0 ? NULL : new(n);
これらの「望ましくない」展開を削除する別のマクロを作成することは可能ですか? たとえば、次のように書いてみました。
#define (operator (file, line) && 0 ? NULL :) operator new
しかし、明らかに括弧はマクロの識別子部分では許可されていません。Boost ライブラリを使用しながらメモリ割り当てを追跡するにはどうすればよいですか?