-1

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

4

2 に答える 2