如何深度克隆含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
相关产品推荐
相关产品推荐

