【发布时间】:2014-02-26 07:28:08
【问题描述】:
我向another question 询问了有关在运算符中使用记录的问题。在测试过程中,我发现了一个异常情况,两个此类实例似乎共享相同的内存。
记录有一个整数数组...
type
TVersion = record
Values: array of Integer;
function Count: Integer;
class operator implicit(aVersion: TVersion): String;
class operator implicit(aVersion: String): TVersion;
end;
class operator TVersion.implicit(aVersion: TVersion): String;
var
X: Integer;
begin
Result:= '';
for X := 0 to Length(aVersion.Values)-1 do begin
if X > 0 then Result:= Result + '.';
Result:= Result + IntToStr(aVersion.Values[X]);
end;
end;
class operator TVersion.implicit(aVersion: String): TVersion;
var
S, T: String;
I: Integer;
begin
S:= aVersion + '.';
SetLength(Result.Values, 0);
while Length(S) > 0 do begin
I:= Pos('.', S);
T:= Copy(S, 1, I-1);
Delete(S, 1, I);
SetLength(Result.Values, Length(Result.Values)+1);
Result.Values[Length(Result.Values)-1]:= StrToIntDef(T, 0);
end;
end;
function TVersion.Count: Integer;
begin
Result:= Length(Values);
end;
现在我尝试实现这个...
var
V1, V2: TVersion;
begin
V1:= '1.2.3.4';
V2:= V1;
ShowMessage(V1);
ShowMessage(V2);
V2.Values[2]:= 8;
ShowMessage(V1);
ShowMessage(V2);
end;
我希望V2 应该是1.2.8.4 和V1 保持1.2.3.4。但是,V1 也会更改为 1.2.8.4。
我在分配这些记录时如何保持它们的独立性?
【问题讨论】:
-
PS - 我最初的问题中有一个错字,它以“A问...”开头,我想这与
ReferQuestion(aAsked: TAskedQuestion);之类的东西有关
标签: arrays delphi delphi-xe2 record