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

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

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

コメント