t1,t2 :Tsomeclass;
t1 :=Tsomeclass.create;
...
t2 :=t1;t2和t1使用同一内存,在free时会出现一些问题。比如说t2.free,然后...t1.free。
请问怎样保证free正确?还有怎样将其赋值相同但不是同一内存。

解决方案 »

  1.   

    t1,t2 :Tsomeclass;
    t1 :=Tsomeclass.create;
    t2 :=Tsomeclass.create;...t2 .Assign(t1);
      

  2.   

    t2 :=t1;只是将t2的对象指针的转移到t1对象上,这将导到t2对象的“内存泄漏”。
    楼上的方法不错啊
      

  3.   

    使用接口,让Tsomeclass从该接口继承,然后生成该接口的实例,如:
    ISomeIntf=interface
    ..TSomeClass=class(tobject,ISomeIntf)
    ...var
      t1,t2:ISomeIntf
    begin
      t1:=TSomeClass.Create();
      t2:=t1;//这时interface会增加引用计数
    //使用完后不需要自己释放t1,delphi会自动判断t1的引用计数为0时才释放。
      ...
    end;
      

  4.   

    if assigned(t1) then
    t1.free;
    if assigned(t2) then
    t2.free;
    这样就好了