Delphi 使用TList时是否必须分配和释放记录<;T>;在德尔菲?
这个问题或多或少说明了一切。鉴于以下记录结构:Delphi 使用TList时是否必须分配和释放记录<;T>;在德尔菲?,delphi,generics,record,Delphi,Generics,Record,这个问题或多或少说明了一切。鉴于以下记录结构: type TPerson = record Name: string; Age: Integer; end; PPerson = ^TPerson; TPersonList = TList<TPerson>; 我必须使用GetMem/FreeMem来分配和释放TPersonList的实例记录,还是可以直接访问TPersonList条目?我的直觉告诉我代码应该是有效的,尽管
type
TPerson = record
Name: string;
Age: Integer;
end;
PPerson = ^TPerson;
TPersonList = TList<TPerson>;
我必须使用
GetMem
/FreeMem
来分配和释放TPersonList
的实例记录,还是可以直接访问TPersonList
条目?我的直觉告诉我代码应该是有效的,尽管我不确定是否有任何与记录初始化或终结相关的问题。您的代码没有问题。当您对记录使用Tlist
时,它将它们视为要复制的值类型。没有必要为它们分配指针。问题是:为什么要声明Perperson?请确保您没有意外地尝试从列表中释放您在Perpson变量中指向的TRecord的内存。这是一个坏习惯,比任何其他习惯都重要。太棒了。非常感谢。现在,我必须决定是否将记录或类用于我的业务对象更有意义。
procedure ReadPeople(DataSet: TDataSet; PersonList: TPersonList);
begin
PersonList.Count := DataSet.RecordCount;
if DataSet.RecordCount = 0 then
Exit;
DataSet.First;
while not DataSet.Eof do begin
PersonList[DataSet.RecNo].Name := DataSet.FieldByName('Name').AsString;
PersonList[DataSet.RecNo].Age := DataSet.FieldByName('Age').AsInteger;
DataSet.Next;
end;
end;