next up previous contents
Next: 12. クラスの継承 Up: 11. メソッドと秘伝 Previous: 11.8 クリエータNew

11.9 ディポーザDispose

Cmm処理系では、使用されなくなった文字列、配列、クラス、インスタンスは、 ガーベジコレクションによって片付けられることになります。

ディスポーザは、使用済みインスタンスが片付けられる前に呼び出される特別 なメソッドです。

Cmm処理系のメモリ管理部は、インスタンスを廃棄するときに、引数なしで、 `Dipose()' という形式で呼び出すことになります。その返り値は無視されま す。当然、ディスポーザ中でのインスタンスの生成は全く無意味なものとなり ます。

どのようなユーザ定義クラスにおいても、Disposeというメソッド名は、 ディスポーザとして予約されています。この`Dispose'という名前も、`New'同 様、一般的な予約語としては扱われません。

ガーベジコレクションの実装方法は、処理系に委ねられますが、どのような処 理系であれ、あるインスタンスの生成元クラスに、メソッドDisposeがあれば、 それが呼び出されることになります。

クリエータが定義されていない場合は、処理系が自動的に定義しますが、ディ スポーザでは暗黙の定義は行われません。


class Example {

static id_pool = 0;
private id ;
method New () {
id = id_pool++ ;
}
method Dispose() {
println(" - disposing - id:" id) ;
}
}

var i, x ;

for (i = 0 ; i < 10000 ; i++)
x = Example->New() ;

上記コード例を実行すると、Exampleクラスのインスタンスがどんどん生成さ れますが、プログラム上必要なのものは、x に代入されているインスタンスの みとなります。そのため、ガーベジコレクションが発生したとき、それまでに 生成されたインスタンスは、片付けられます。

Exampleクラスのディスポーザによって、片付けられるインスタンスの id が わかります。このidによって、どのインスタンスが片付けられるかが、下記のよ うなメッセージによってわかります。

- disposing - id:0
- disposing - id:1
- disposing - id:2

next up previous contents
Next: 12. クラスの継承 Up: 11. メソッドと秘伝 Previous: 11.8 クリエータNew
Tetsuo Ono
1998-11-05