我在测试时候发现有趣的事情跟大家一起讨论
var aa:Tedit;
aa:=tedit.Create(nil);
aa:=edit1; //这里edit1有‘hh’值
showmessage(aa.Text);//这里出来hh
aa.Text:='bb';
showmessage(edit1.Text);//这里出来bb
aa.Free;//这时候aa和edit1全都free到了
不知道在这里内存是怎么运行的,大家讨论讨论让我见识一下吧
var aa:Tedit;
aa:=tedit.Create(nil);
aa:=edit1; //这里edit1有‘hh’值
showmessage(aa.Text);//这里出来hh
aa.Text:='bb';
showmessage(edit1.Text);//这里出来bb
aa.Free;//这时候aa和edit1全都free到了
不知道在这里内存是怎么运行的,大家讨论讨论让我见识一下吧
var aa:Tedit;
aa:=tedit.Create(nil);
aa:=edit1; //这里edit1有‘hh’值 // 你這一操作,AA就失去了 tedit.Create(nil); 的實例的引用,與 Edit1 一起同時指向EDIT1的實例。
showmessage(aa.Text);//这里出来hh
aa.Text:='bb';
showmessage(edit1.Text);//这里出来bb //如上所說,所以,AA的值的改變也就是對 Edit1 的實例的值的改變
aa.Free;//这时候aa和edit1全都free到了 // 這個FREE只是釋入了 Edit1 的實例。 Tedit.create(nil); // 這個就會泄漏掉
不知道在这里内存是怎么运行的,大家讨论讨论让我见识一下吧
Delphi中的对象名(也可以称做变量)表示对象的引用,并不表示对象本身,相当于指向对象的指针,这就所谓的“对象引用模型”
楼主这段代码本身就是有问题的
[code= DELPHI]
var aa:Tedit;
aa:=tedit.Create(nil); //这里已经为其分配了内存
aa:=edit1; //这里edit1有‘hh’值 //这里又将其指向EDIT1, 前边分配的内存白分配了
[/code]
I: PInteger;
J: Integer;
begin
J := 2;
New(I);
I := @j;
Dispose(I);//这里释放的是J,而不是I先分配的, I肯定是内存泄露了
end;