这样赋值有问题?(100分)

  • 主题发起人 主题发起人 yabbi
  • 开始时间 开始时间
Y

yabbi

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
我使用D6,首先定义了一个完全数据类型的TBlock,他有String和TStrings以及Integer
这些类型的数据,String和Tstrings都在Create中初始化;在应外一个类中使用TBlock,
但是通过mBlock:=AValue;后;如果AValue.Free后,发现mBlock中的String和TString都发生了
变化;
应该怎么解决这个问题,还有TStrings之间的赋值应该怎么进行?
 
你用Assign试试看.下面是一个TStrings例子.
var T1,T2:TstringList;
i:integer;
ss:string;
begin
T1:=TStringList.Create;
T2:=TStringList.Create;
T1.Add('123');
T1.Add('234');
T2.Assign(T1);
// T2:=T1;
T1.Clear;
for i:=0 to t2.Count-1 do
ss:=ss+T2.Strings+#13#10;
ShowMessage(ss);
T2.Free;
// T1.Free;
end;
//标识的是第二次实验方法,将//去掉,将 T2.Assign(T1);加上//,这时T2就不会有内容了.
 
在对象之间进行赋值操作时, := 只是将原对象的句炳传给目标对象,赋值完成后,二者指向的
是内存中的同一块区域,这时你对其中任一个对象的操作都会影响另一个。
用Assign则是完全的复制,每个对象都有自己的一块内存区域,再进行操作,就互不影响了。
 
多人接受答案了。
 
后退
顶部