我有用/clr编译的C++/CLI库。库中的内存泄漏
ref class MyClass
{
private:
array<int>^ d;
public:
MyClass()
{
int size=10000000;
d=gcnew array<int>(size);
for(int x=0;x<size;x++)
{
d[x]=x;
};
};
~MyClass()
{
MessageBox::Show(gcnew String(L"Disposed"));
};
protected:
!MyClass()
{
MessageBox::Show(gcnew String(L"Finalized"));
};
};
static MyClass^ Test()
{
MyClass^ mc = gcnew MyClass();
//msclr::auto_handle<MyClass^> mc = gcnew MyClass();//this shows error
//msclr::auto_handle<MyClass> mc = gcnew MyClass();//this either shows error
//due to return type of function Test()
return mc;
};
当我使用这种方法,它超出了范围它应该显示“Disposed”并释放内存。
private void button1_Click(object sender, EventArgs e)
{
MyDll.MyClass mc= MyDll.Test();
}
不幸的是,它并没有这样做。只有通过执行Finalizer,应用程序退出后,内存才会释放。如何正确释放这个内存?
如何配置阵列^obj = gcnew array (size);'? –
maszynaz
为什么'dispose后的GC.Collect();'命令不会自动调用? – maszynaz
它是.NET:处理事情你必须调用Dispose,否则垃圾收集器在某个时间点完成分配(以某种方式平衡性能和内存管理)。要处理一个对象数组,你必须遍历数组并处理每个元素。 –