这是我的示例代码:
type
PData = ^TData;
TData = record
str : string;
strlist : TStringList;
end;
var
P1 : PData;
P2 : PData;
P3 : PData;
P4 : PData;
begin
New(P1);
New(P2);
P1.str := 'string';
// copy
P2^ := P1^;
P2.str := P2.str + '_copy';
Memo1.Lines.Add('This is P1:' + P1.str); //This is P1:string
Memo1.Lines.Add('This is P2:' + P2.str); //This is P2:string_copy
// so change P2'Data didn't change P1's Data
// but this :
New(P3);
New(P4);
P3.str := 'string';
P3.strlist := TStringList.Create;
P3.strlist.Add('one line');
// copy
P4^ := P3^;
// just add P4's data
P4.strlist.Add('two line');
Memo1.Lines.Add('P3''s Data:' + IntToStr(P3.strlist.Count));
Memo1.Lines.Add(P3.strlist.Text);
Memo1.Lines.Add('P4''s Data:' + IntToStr(P4.strlist.Count));
Memo1.Lines.Add(P4.strlist.Text);
{
P3's Data:2
one line
two line
P4's Data:2
one line
two line
}
end;
为什么当用 a 复制点数据时class
,它会改变原始数据,但是当string
使用数据时P1^ := P2^
复制点数据不会改变原始数据。