<p>従来型のTListだと下記のサンプルのようにrecord型変数を、TList.Addする際にNewで生成して格納して、TList.Delete(remove?)する際に格納していたrecord型変数をDisposeする必要があった。</p>
<pre class="brush:
delphi" title="従来型TListにrecord型変数を保持する">type
   TMyRec = record
      ID: integer;
      Name: string;
   end;
   PMyRec = ^TMyRec;

var
   List:TList;
   i: integer;
   myrec: PMyRec;
begin
   List := TList.create;

   // データサンプルを作成してListに持ってもらう
   for i := 0 to 99 do
   begin
      new(myrec);
      myrec^.name := intToStr(random(99999));
      myrec^.ID := i;
      List.add(myrec);
   end;

   // データの使用例
   for i:= 0 to List.Count-1 do
   begin
      ListBox1.items.add(Format(&rsquo;ID:%5.5d, Name=%s&rsquo;,
                         [PMyRec(List[i])^.ID), PMyRec(List[i])^.Name]);
   end;

   // 使い終わったら必ず個々のデータもTListも解放
   for i:= 0 to List.count-1 do dispose(PMyRec(List[i]));
   List.free;
end;
</pre>
<p>しかし、ジェネリックだとNewやDisposeは不要でそのまま使えると言うことらしい。便利になったな。</p>
<p>しかし、基本的にTListを使う際には継承してして独自クラスを作ってから使うんだけどジェネリックのTListはDeleteがオーバーライドできない。<br />classを格納する場合はどうしたら良いのかな?とふと疑問が湧いた&hellip;。<br />Delphi付属のジェネリッククラスは、使い方がよくわからん。ソートとかの実装方法が直感的にわからなかった。</p>
<p>Delphi 2010, XE だと <a title="Delphi-coll" href="http://code.google.com/p/delphi-coll/">delphi-coll</a> というサイトで公開されているジェネリッククラス群もあるみたい。</p>