a:=Tstringlist.create;
b:=Tstringlist.create;
b:=a;
这样是不是b和a都指向同一内存区域?当b改变时,a也跟着改变,两者的值都是一样?
java中是这样的,DELPHI中是这样吗?

解决方案 »

  1.   

    如果不清楚的话,那么就不要乱讲,我发现了好多误导人的回答
    a:=Tstringlist.create;
    b:=Tstringlist.create;
    b:=a;a 和 b都是变量,变量能够互相赋值吗? 怎能能 2:=1 !!!!!
    虽然这样运行时不会出现明显的错误,其实已经发生了内存泄漏!
    a,b:TStringList;
    a:=TStringList.Create;
    b:=a;
    这样b,a,才是指向同一块内存。
      

  2.   


    a,b:TStringList;
    a:=TStringList.Create;
    b:=a;
    这样子b和a就是指向了同一个地方。
    a,b:TStringList;
    a:=TStringList.Create;
    b:=TStringList.Create;
    b:=a;
    这样子原来的b在内存分配的TStringList就丢失了。而指向了a。
      

  3.   

    wxjh(农民) 再说什么呀?
    a 和 b都是变量,变量能够互相赋值吗? 怎能能 2:=1 !!!!!
    a和b都是指针,当然能互相赋值,只是b分配的内存失去应用造成内存泄漏而已。
      

  4.   

    a:=TStringList.Create;
    b:=TStringList.Create;
    b:=a;
    是可以的
    A和B本质是指针,但这样丢失了B的空间,B被创建了,但已不能访问了,找不到B的地址了,
    就是所谓的内存泄漏
      

  5.   

    a为TstringList的一个实例,b也为TSTringlist的一个实例,直接赋值是会造成内存泄漏,
    你可以用a.sssign(b)不就行了啊。
    var a,b:TStringList;
    begin
       a:=TStringList.Create;
       b:= TStringList.Create;  try
       a.Add('a');
       a.Add('b');
       a.Add('c');
       b.Add('c');
       // b:=a; 如果去掉注释就出现内存泄露
       b.Assign(a);
       ShowMessage(a.Text);
       ShowMessage(b.Text);
      finally
        a.Free;
        b.Free;
      end;