動的オブジェクトリスト2 -- 廃棄
HandleList中の一つの要素オブジェクトを廃棄するには、そのオブジェクトを現行オブジェクトにした上で、ReleaseObj:メッセージを送ります。例えば、インデックス3のオブジェクトを廃棄したいときには、
3 Select: MyObjList
ReleaseObj: MyObjList
とします。このとき、まずハンドルされているヒープオブジェクトに"Release:"が送られ、後にハンドルされている領域自体が解放され、システムに返されます。ただし、リストから取り除かれることはありません。nilH(無効なハンドル(nil Handle)を表すMops定数)を内容とする要素として残ります。
オブジェクトを廃棄した上でリストから取り除くには、RemoveObj:を使います。インデックス1の要素オブジェクトを廃棄してリストから取り除くには、
1 Select: MyObjList
RemoveObj: MyObjList
とします。ただしこの場合、取り除かれた要素より後の要素については、当然、インデックス値が一つずつ繰り上がることになります。インデックス値に依存する使い方をしているときには注意が必要です。
リストの全体を廃棄するのは"Release:"です。リストの要素となっている全オブジェクトに"Release:"メッセージを送った上でヒープ領域を解放し、リストの要素数を0に初期化します。
各要素ハンドルに上位クラスのメソッドをバインドしたいときには、リストオブジェクト名を書けば、スタックに積まれるベースアドレスは、リストオブジェクトのではなくて、現行要素であるObjHandleのアドレスになりますから、class_as>でバインドを強制することができます。ハンドルとしてRelease:したいときには、この方法を使います。
関連項目:
最終更新:2019年02月28日 23:16