【问题标题】:Do I have to allocate and free records when using TList<T> in Delphi?在 Delphi 中使用 TList<T> 时是否必须分配和释放记录?
【发布时间】:2010-04-24 01:04:41
【问题描述】:

这个问题或多或少说明了一切。给定以下记录结构:

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

【问题讨论】:

    标签: delphi generics record


    【解决方案1】:

    您的代码没问题。当您将Tlist&lt;T&gt; 与记录一起使用时,它会将它们视为值类型,以进行复制。无需为它们分配指针。

    【讨论】:

    • 太棒了。谢谢!现在我必须决定记录或类是否更适合用于我的业务对象。
    【解决方案2】:

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

    【讨论】:

    • 这是一个坏习惯。
    猜你喜欢
    • 2023-03-21
    • 2011-08-13
    • 2019-11-26
    • 2017-06-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多