我在测试时候发现有趣的事情跟大家一起讨论
  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到了
  不知道在这里内存是怎么运行的,大家讨论讨论让我见识一下吧

解决方案 »

  1.   

    aa:=edit1,这时引用,他们指向同一个地址,修改aa也就修改了edit1
      

  2.   

    我在测试时候发现有趣的事情跟大家一起讨论 
      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); // 這個就會泄漏掉
      不知道在这里内存是怎么运行的,大家讨论讨论让我见识一下吧 
      

  3.   

    说是说引用,其实说指针更好理解些,个人觉得, 
    Delphi中的对象名(也可以称做变量)表示对象的引用,并不表示对象本身,相当于指向对象的指针,这就所谓的“对象引用模型”
    楼主这段代码本身就是有问题的
    [code= DELPHI]
      var aa:Tedit; 
      aa:=tedit.Create(nil); //这里已经为其分配了内存
      aa:=edit1; //这里edit1有‘hh’值  //这里又将其指向EDIT1, 前边分配的内存白分配了
    [/code]
      

  4.   

    楼主的错误和下边的代码错误 意思差不多var
      I: PInteger;
      J: Integer;
    begin
      J := 2;
      New(I);
      I := @j;
      Dispose(I);//这里释放的是J,而不是I先分配的, I肯定是内存泄露了 
    end;