我有一个本机 C++ 项目,它通过包装类使用 .NET 图表实用程序。包装类的精简版是这样的;
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
仅在程序退出时被破坏。这会导致不需要的内存堆积,并且出现“内存不足”异常。
当包装器被破坏时,如何确保托管对象被破坏?