新しいクラスのnew []、...演算子をクラスにオーバーロードして、ファイルと行をログに記録してメモリの割り当て/リークを簡単に追跡できるようにしました。新しい演算子のオーバーロードが発生しました。
今の問題は、私のスタックと配列クラス(およびメモリを割り当て、他のテンプレートコンテナクラス)である:
私は新しいを持っている私のクラスのいずれかでそれらを使用する場合は、新しいです[]、...演算子はそれがうまく動作するオーバーロードされます。
しかし、標準のC++データ型(int、float、...)で使用すると、オーバーロードされたnew演算子は新しい(__ LINE __、__ FILE __ )演算子(または新しい配置のようなもの)。スタックコードの
例:
// placement new
T* t=new(__ LINE __ , __ FILE__)(&m_data[i])T;
だから私はこの作業を行う方法について良いアイデアをよ。新しい(__ LINE __、__ FILE __)を新しいI loose memory logging能力で置き換えた場合。 1つの解決方法は、デフォルトのnewが使用されている標準のデータ型に対して別々のスタックを作成することです。
テンプレートパラメータが構造体、クラスまたは組み込みのC++型である場合、コンパイル時に検出する方法はありますか?
どのようにこのようなものを処理しますか? あなたは何をお勧めしますか? このデザインに関するコメント(良い、悪い)は明らかに歓迎されています(「自分のコンテナでホイールを再発明しない」など)。
「メモリリークトレース」を下にこのようhereを追跡するメモリをやっについてtoturialがありますが、 '、オーバーロードがあります演算子new(__ LINE__、__FILE __) 'を使用し、' int'、 'float'などで使用しようとしましたか? – iammilind
一つの選択肢は、グローバルな 'operator new()'と友達を置き換えることです。 – sharptooth
メモリリークのデバッグでは、後になっていますが、なぜこのために既に存在するものの作業を行っているのか分かりません。Valgrind? – Nim