记录类型中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;  
复制代码

http://www.cnblogs.com/gleam/p/3600797.html

原文地址:https://www.cnblogs.com/findumars/p/5551681.html