我真的很困惑.
// initial class type TTestClass = class( TInterfacedObject) end; {...} // test procedure procedure testMF(); var c1,c2 : TTestClass; begin c1 := TTestClass.Create(); // create,addref c2 := c1; // addref c1 := nil; // refcount - 1 MessageBox( 0,pchar( inttostr( c2.refcount)),'',0); // just to see the value end;
解决方法
只有在分配给接口变量而不是对象变量时才会修改Refcount.
procedure testMF(); var c1,c2 : TTestClass; Intf1,Intf2 : IUnknown; begin c1 := TTestClass.Create(); // create,does NOT addref c2 := c1; // does NOT addref Intf1 := C2; //Here it does addref Intf2 := C1; //Here,it does AddRef again c1 := nil; // Does NOT refcount - 1 Intf2 := nil; //Does refcount -1 MessageBox( 0,0); // just to see the value //Now it DOES show Refcount = 1 end;