Sehr verwirrend finde ich auch das Verhalten im Constructor.
Delphi-Quellcode:
constructor TFoo.Create;
begin // RefCount = 0
IrgendwasInZeileEins; // RefCount = 1 ... hier nur um zu zeigen, dass es nicht mit inherited zusammenhängt
inherited; // RefCount = 1
end; // RefCount = 0
..
FooObj := TFoo.Create; // RefCount = 0
FooIntf := TFoo.Create; // RefCount = 1
..
Der RefCounter wird erst mal erhöht und dann wieder auf 0 reduziert.
Einfach mal den Source von TInterfacedObject lesen.