Copy TBytes是否创建了TRUE副本?

时间:2017-04-15 23:27:06

标签: arrays delphi delphi-10.1-berlin

function TFormMain.GetMyTBytes(const AFileName: string): TBytes;
begin
  with TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone) do
  try
    SetLength(Result, Size);
    ReadBuffer(PByte(Result)^, Size);
  finally
    Free;
  end;
end;  

// ... 

var
  TBA, TBB: TBytes;

// ...

TBA := GetMyTBytes('C:\mydoc.docx');
TBB := Copy(TBA);

在这种情况下是否可以排除TBB在此操作结束时与TBA共享任何内存?

1 个答案:

答案 0 :(得分:4)

Copy()在内存中创建数组数据的副本。一旦复制完成,TBATBB之间就没有任何共享。

此外,您的GetMyTBytes()是多余的,System.IOUtils单位可以使用TFile.ReadAllBytes()方法。