You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何深度克隆含TArray<TGItem>的Delphi TGItem记录实例?

Delphi 10.4中TGItem记录的深度克隆实现

直接对TGItem记录执行B := A赋值时,Components数组会共享引用,修改其中一方的子组件会影响另一方。通过重载Assign运算符可以实现深度克隆,确保所有层级的结构都是独立的,具体实现如下:

完整Assign运算符实现

class operator TGItem.Assign(var Dest: TGItem; const [ref] Src: TGItem);
var
  I: Integer;
begin
  // 复制基础字符串字段
  Dest.NameShort := Src.NameShort;
  Dest.NameLong := Src.NameLong;
  Dest.Formula := Src.Formula;

  // 深度克隆Components数组
  SetLength(Dest.Components, Length(Src.Components));
  for I := 0 to High(Src.Components) do
  begin
    // 递归调用Assign运算符,克隆每个子项
    Dest.Components[I] := Src.Components[I];
  end;
end;

关键逻辑说明

  • 基础字段处理:Delphi的字符串是引用计数类型,直接赋值即可自动维护独立性(修改时触发写时复制),无需额外处理。
  • 数组深度克隆:先将目标数组的长度设置为与源数组一致,再遍历每个元素,通过:=赋值触发重载的Assign运算符,递归完成每一层子项的克隆,确保所有层级的Components数组都是独立实例,不会共享引用。

使用方式

完成运算符重载后,直接执行B := A就会自动触发深度克隆,此时A和B的所有层级结构均相互独立,修改任意一方的组件都不会影响另一方。

内容的提问来源于stack exchange,提问作者Doege

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:32:08