つぃーと

クラス管理

2009年07月07日 17時27分52秒 | インポート

オブジェクトへのポインタを保持する方法だとうまくいかない。
てことで、オブジェクトを保持する方法に戻して、自力で双方向リストにした。
New - Disposeでやったら、デストラクタが呼ばれずに、
片方のリストからは削除、もう片方には残るという構造ができた


クラス管理

2009年07月07日 11時59分12秒 | インポート

オブジェクトOを作りました。
これをリストL1L2に入れました。
L1のリストからOを解放しないで消す、つまり、L2だけOを残すんです。
ExtractというメソッドがあったのでL1で、実行しました。
Oのデストラクタが呼び出されてしまいました。。。。

C++ではnewで動的に変数と同じようにオブジェクトも作成できます。
できたオブジェクト変数の実態は単なるポインタなので、NULLを代入すれば
ゴミを作ることができます(ってメモリーリークじゃん!)。
で、PascalでNewを使ったら、コンストラクタが呼び出されなかったです。
obj := Class.Createとやると、関数を抜けた途端、objの値が不安定になります。
だめもとで、L1nilを代入したら、デストラクタが呼び出されました。。。。
(まぁ、これはこれで、メモリーリークを抑えるにはいいのかも)

仕方ないので、L1はポインタのリストにして、^objという形でアクセスしました。

JavaやObject-Cのガベージコレクタという考え方はすごいと実感しました。