/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 を実行してアプリケーションを終了した後にのみ解放されます。このメモリを適切に解放するにはどうすればよいですか?