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
时间: 2024-12-18 10:02:39