记录类型中String的释放

String能自动释放,在进行内存拷贝时需要进行手动释放。可以直接调用Finalize手工释放

如:TGraphicHideTab 记录中声明的Caption:string

  TGraphicHideTab = record
    Image:Integer;
    Data:Integer;
    Size:Integer;       /// 绘制时使用的尺寸
    Caption:string;     /// <--- 记录中有String
  end;
直接内存处理的时候String不会自动处理计数,需要手工处理String。
var 
  FItems:array of TGraphicHideTab;
  FCount:integer;

procedure DeleteItem(AIndex: Integer);
begin
  /// 
  ///  使用内存移动的时候String计数不会改变,因此需要手工处理String的计数
  ///
  if (AIndex >= 0) and (AIndex < FCount) then
  begin
    Finalize(FItems[AIndex]);   // <-- 手工释放Record中的String
    if AIndex < FCount - 1 then
      Move(FItems[AIndex + 1], FItems[AIndex], sizeof(TGraphicHideTab) * (FCount - AIndex - 1));
    dec(FCount);
  end;
end;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值