记录类型中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;  

 

posted @ 2014-03-14 16:10  cmacro  阅读(1044)  评论(0编辑  收藏  举报