String Copy Internals

时间:2015-10-05 07:44:28

标签: delphi copy deep-copy

考虑以下代码:

program Project11;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function Test: string;
var
   r, s: string;
begin
   r := 'Hello';
   Writeln(Format('%.8x', [NativeInt(Pointer(r))]));
   s := r;
   Writeln(Format('%.8x', [NativeInt(Pointer(s))]));
   Result := r;
   Writeln(Format('%.8x', [NativeInt(Pointer(Result))]));
end;

var
  S1: string;

begin
  try
    S1:= Test;
    Writeln(Format('%.8x', [NativeInt(Pointer(S1))]));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

在Delphi XE上运行时,我得到了

0040F358
0040F358
020A28CC
020A28CC

问题:为什么编译器在为函数的结果分配本地字符串变量时会进行深层复制?

0 个答案:

没有答案