The question more or less says it all. Given the following record structure:
type
TPerson = record
Name: string;
Age: Integer;
end;
PPerson = ^TPerson;
TPersonList = TList<TPerson>;
Is the following code valid?
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;
Do I have to use GetMem
/FreeMem
to allocate and free records an instance of TPersonList
, or am I free to directly access the TPersonList
entries directly? My gut says that the code should be valid, though I'm not sure if there's any wrinkles related to record initialization or finalization.
Your code's fine. When you use Tlist<T>
with records, it treats them as value types, to be copied around. There's no need to allocate pointers for them.
The question is: Why do you declare PPerson? Make sure that you do not accidentally try to deallocate the memory of a TRecord from your list to which you were pointing in a PPerson variable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With