ラッパークラスを介して.NETチャートユーティリティを利用するネイティブC++プロジェクトがあります。ラッパークラスの縮小版は次のようなものです。
class ChartWrapper
{
private:
gcroot<ChartNamespace::ManagedChartClass^>* m_Chart;
public:
ChartWrapper(): m_Chart(new gcroot<ChartNamespace::ManagedChartClass^>)
{
*m_Chart = gcnew ChartNamespace::ManagedChartClass;
}
~ChartWrapper()
{
delete m_Chart;
}
// Methods to interact with the chart
}
関数は、ラッパーを介してチャートのインスタンス化、操作、および削除を処理します。
void CreateChart()
{
ChartWrapper* chart = new ChartWrapper();
// Do stuff to the chart
delete chart;
}
プログラムインスタンス中に何百ものチャートを作成する可能性があります。終了時に呼び出すことで各ラッパーを明示的に削除delete
しますが、管理対象オブジェクトManagedChartClass
はプログラムの終了時にのみ破棄されます。これにより、不要なメモリが蓄積され、「メモリ不足」の例外が発生します。
ラッパーが破棄されたときに管理対象オブジェクトが破棄されていることを確認するにはどうすればよいですか?