在 Delphi 中使用 TList<T> 时,是否需要分配和释放记录?

6

问题基本上已经说明了一切。给定以下记录结构:

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个回答

10

您的代码没问题。当您使用 Tlist<T> 来处理记录时,它会将其视为值类型以进行复制操作。这些记录不需要分配指针。


太棒了。谢谢!现在我必须决定对于我的业务对象,使用记录还是类更有意义。 - afrazier

1
问题是:为什么要声明PPerson?确保您不会意外地尝试从指向PPerson变量的列表中释放TRecord的内存。

这只是一种坏习惯,不过也没什么。 - afrazier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接