C#では、C++と同様にdestructorを書くことができる。しかし、destructor の呼び出される タイミングを制御することはできないようである。例えば次のようなプログラムを 考えよう。
// test of destructor
using System;
public class A
{
private int myint;
public A(int a)
{
myint = a;
}
~A()
{
Console.WriteLine("Destructed[" + myint + "]" );
}
}
public class Test
{
public static void Main(String[] args)
{
A aobj;
aobj = new A(1);
aobj = new A(2);
aobj = new A(3);
}
}
このプログラムで、aobj = new A(2); が実行された時点で、
new A(1);で生成された object は不要になっているので、
destructor が呼ばれてもよさそうである。しかし、筆者の環境では
new A(1);で生成された object の destructor が呼ばれたのは
一番最後であった。
このことは、共有リソースを利用する Class を作る時は十分注意する必要がある ことを意味する。即ち、一端確保した共有リソースを desctructor で解放するのでは、 いつ解放されるかわかない。もしそれが唯一のリソースだとすると、object が プログラム上で消滅した時点で解放されているとは限らず、次の確保ができないと いう事態が生じる可能性がある。