问题或多或少都说明了一切。鉴于以下记录结构:
type
TPerson = record
Name: string;
Age: Integer;
end;
PPerson = ^TPerson;
TPersonList = TList<TPerson>;
以下代码是否有效?
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;
我是否必须使用GetMem
/ FreeMem
来分配和释放TPersonList
的实例,或者我是否可以直接直接访问TPersonList
条目?我的直觉说代码应该是有效的,但我不确定是否有任何与记录初始化或最终确定有关的皱纹。
答案 0 :(得分:10)
你的代码很好。当您对记录使用Tlist<T>
时,它会将它们视为要复制的值类型。没有必要为它们分配指针。
答案 1 :(得分:1)
问题是:你为什么申报人?确保您不会意外地尝试从您在Person变量中指向的列表中释放TRecord的内存。