问题或多或少都说明了一切.鉴于以下记录结构:
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条目?我的直觉说代码应该是有效的,虽然我不确定是否有任何与记录初始化或完成相关的皱纹.
解决方法
你的代码很好.当您使用Tlist< T>时对于记录,它将它们视为值类型,以便复制.没有必要为它们分配指针.