2012/07/04

Delphi Generics TList のアイテムを自動開放

Generics.Collections.TList のアイテムは自動開放されないので
クラスなんかに埋め込んだ場合 OnNotify イベントを利用するとスッキリする
procedure TMyClass.OnNotifyItem(Sender: TObject; const Item: <t>; Action: TCollectionNotification);
begin
    if (Action = cnRemoved) then begin // 追加, 削除, 入替がある
        Item.Free;
    end;
end;
// :
OnNotify = OnNotifyItem;
例では OnNotifyItem は任意の procedure 名、<t>の所に TList<t>で使用した型が入る
(試しに無名メソッドを使ってみたけど、そっちはコンパイルが通らなかった)

【追記】
TObjectList というのがあり、こっちは自動開放されるリストだそうです
(Generics.Collections にも Generics版あり)
TObjectList<t>.Create(True); ←Trueで生成すると、アイテムが破棄されるときにオブジェクトが解放される
使い方は TList と同じ

0 件のコメント: