小编dwr*_*udr的帖子

这是预期的 Delphi 动态数组行为吗

问题是 - 当动态数组被设置为类成员时,它们是如何由 Delphi 内部管理的?它们是通过引用复制还是传递?使用 Delphi 10.3.3。

UpdateArray方法从数组中删除第一个元素。但是数组长度保持为 2。该UpdateArrayWithParam方法还会从数组中删除第一个元素。但是数组长度正确地减少到 1。

这是一个代码示例:

interface

type
  TSomeRec = record
      Name: string;
  end;
  TSomeRecArray = array of TSomeRec;

  TSomeRecUpdate = class
    Arr: TSomeRecArray;
    procedure UpdateArray;
    procedure UpdateArrayWithParam(var ParamArray: TSomeRecArray);
  end;

implementation

procedure TSomeRecUpdate.UpdateArray;
begin
    Delete(Arr, 0, 1);
end;

procedure TSomeRecUpdate.UpdateArrayWithParam(var ParamArray: TSomeRecArray);
begin
    Delete(ParamArray, 0, 1);
end;

procedure Test;
var r: TSomeRec;
    lArr: TSomeRecArray;
    recUpdate: TSomeRecUpdate;
begin
    lArr := [];

    r.Name := 'abc';
    lArr := lArr + [r];
    r.Name := …
Run Code Online (Sandbox Code Playgroud)

arrays delphi dynamic

8
推荐指数
1
解决办法
314
查看次数

标签 统计

arrays ×1

delphi ×1

dynamic ×1