TObjectListのItem破棄
18 TObjectListAutoFree 動作確認 Delphi2007 更新日 2010/04/21(水)

TObjectListはItemを自動で破棄してくれるListです。
便利に使えますが、プロパティの設定で
自動破棄してくれなくなるので注意してください。

デフォルトではItemを自動破棄するように
OwnsObjects = True になります。
Ownerで管理するObjectsということです。

ObjectList.Free時に所有する全ItemをFreeしますし
ObjectList.Delete/Remove時にもItemをFreeします。

※  ObjectList.ClearについてはD2007のヘルプに記載がなく
    VCLソースで確認しましたが、
    Clear内部でDeleteを呼び出しているので
    Freeと同様に全ItemをFreeしてくれます。

DeleteとRemoveは
Indexを指定して削除は、Deleteメソッド
Object自体を指定して削除は、Removeメソッドを使います。

Removeは戻り値として削除直前のIndexを返します。

OwnsObjects = Falseとすると上記のタイミングで
自分でFreeする必要があります。

※  OwnsObjectsというプロパティ名が誤解の元の気がします。
    AutoFreeとかいうプロパティ名の方がわかりやすいのに。

Extractメソッドは、Object自体を指定して呼び出し
OwnsObjectsの値に関係なくオブジェクトを解放せずに
リストから取り除く事ができるメソッドです。

通常は、デフォルトの OwnsObjects = True で
使用するのがよいでしょう。