我需要存储一个临时的记录列表,并认为TList将是一个很好的方法来做到这一点?但是我不确定如何做到这一点与TList,并想知道这是否是最好的,如果任何人有任何例子如何做到这一点?
解决方法
最简单的方法是创建您自己的TList的后代。以下是一个简单的示例控制台应用程序:
program Project1; {$APPTYPE CONSOLE} uses SysUtils,Classes; type PMyRec=^TMyRec; TMyRec=record Value: Integer; AByte: Byte; end; TMyRecList=class(TList) private function Get(Index: Integer): PMyRec; public destructor Destroy; override; function Add(Value: PMyRec): Integer; property Items[Index: Integer]: PMyRec read Get; default; end; { TMyRecList } function TMyRecList.Add(Value: PMyRec): Integer; begin Result := inherited Add(Value); end; destructor TMyRecList.Destroy; var i: Integer; begin for i := 0 to Count - 1 do FreeMem(Items[i]); inherited; end; function TMyRecList.Get(Index: Integer): PMyRec; begin Result := PMyRec(inherited Get(Index)); end; var MyRecList: TMyRecList; MyRec: PMyRec; tmp: Integer; begin MyRecList := TMyRecList.Create; for tmp := 0 to 9 do begin GetMem(MyRec,SizeOf(TMyRec)); MyRec.Value := tmp; MyRec.AByte := Byte(tmp); MyRecList.Add(MyRec); end; for tmp := 0 to MyRecList.Count - 1 do Writeln('Value: ',MyRecList[tmp].Value,' AByte: ',MyRecList[tmp].AByte); WriteLn(' Press Enter to free the list'); ReadLn; MyRecList.Free; end.
这消除了一些东西:
>它处理释放内存。
>你不必打破一切,使用它。
正如雷米和沃伦都说,这是一个更多的工作,因为你必须分配内存,当你添加新的记录。