ref class

ref classで定義されたクラスは、つねにマネージヒープ上に作られます。スタック上に作ったように見えても、実際はマネージヒープ上に作られます。

gcnewを使ってインスタンスを作成した場合、^を使って参照として受け取ります。これをハンドルといいます。

ref class C {
    int i;
    int j;
public:
    C() {
    }
    ~C() {
    }
    !C() {
    }
};
int main()
{
    C^ a = gcnew C;
    C^ b = gcnew C;
    C c;
    {
        C d;
    }  // d.~C()が呼ばれます。
 
    delete a;  // a->~C()が呼ばれます。
}  // c.~C()が呼ばれます。
// b.!C()が呼ばれます。