在Delphi中使用TList <t>时,是否必须分配和释放记录?</t>

时间:2010-04-24 01:04:41

标签: delphi generics record

问题或多或少都说明了一切。鉴于以下记录结构:

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条目?我的直觉说代码应该是有效的,但我不确定是否有任何与记录初始化或最终确定有关的皱纹。

2 个答案:

答案 0 :(得分:10)

你的代码很好。当您对记录使用Tlist<T>时,它会将它们视为要复制的值类型。没有必要为它们分配指针。

答案 1 :(得分:1)

问题是:你为什么申报人?确保您不会意外地尝试从您在Person变量中指向的列表中释放TRecord的内存。