我有用 /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;
};
当我使用此方法并且超出范围时,它应该显示“已处置”并释放内存。
private void button1_Click(object sender, EventArgs e)
{
MyDll.MyClass mc= MyDll.Test();
}
不幸的是,它没有这样做。内存仅在应用程序退出后通过执行终结器释放。如何正确释放这段内存?