私はメモリリークツールを開発しています。これで、新しい演算子と削除演算子をオーバーロードしています。その正常に動作します。しかし、このツールを作成しているコードは約 15000 行です。既存のコードを変更することはできませんが、メモリリーク ツール関数を既存のコードに呼び出すことができます。stl コンテナー (リスト、マップ、スタックなど) を持つ既存のコード。Stl コンテナーは、new および delete 演算子も呼び出して、メモリの割り当てまたは割り当て解除を行います。stl コンテナが、オーバーロードされた new および delete ではない new および delete 演算子を呼び出す必要があることを望みます。例:
int *iptr = new int[10] ----> should call overloaded new[]
delete [] iptr -------------> should call overloaded delete[]
map.insert(10) -------------> should call default new[] ( which are in new.h)
map.erase() ---------------> should call default delete[] ( which are in new.h)
どうすればできますか?どんな助けでも感謝します。
申し訳ありませんが、new と delete を次のマクロに置き換えていることを忘れていました。
#define new DEBUG_NEW
#define DEBUG_NEW TrackMemory(__FILE__, __LINE__) ->* new
#define delete TrackDelete(__FILE__, __LINE__); delete
ここで、TrackMemory はメモリを追跡するために使用され、new は delete と同じようにメモリを割り当てるために使用されます。私のツールも正常に動作しますが、stl コンテナーが表示されると、オーバーロードされた new のみを使用するため、間違った結果が得られます。私を助けてください