In diesem speziellen Fall sollte es keine Probleme verursachen.
Gefährlich ist aber z.B. sowas:
Delphi-Quellcode:
procedure DoSomethingWithFoo(Foo: IFoo);
begin
end;
function CreateFoo: IFoo;
var
TmpFoo: TFoo;
begin
TmpFoo := TmpFoo.Create();
TempFoo.X := 1;
DoSomethingWithFoo(TmpFoo);
Result := TmpFoo;
end;
In dem Fall würde es crashen, weil intern grob folgendes passiert:
Delphi-Quellcode:
procedure DoSomethingWithFoo(Foo: IFoo);
begin
end;
function CreateFoo: IFoo;
var
TmpFoo: TFoo;
TmpInterface: IFoo;
begin
TmpFoo := TmpFoo.Create();
// RefCount = 0
TempFoo.X := 1;
TmpInterface := TmpFoo;
// inc(RefCount) (= 1)
DoSomethingWithFoo(TmpInterface);
TmpInterface :=
nil;
// dec(RefCount) (= 0) -> TmpFoo.Free;
Result := TmpFoo;
// inc(RefCount)... crash, weil Objekt schon freigegeben ist
end;
Es muss natürlich nicht genau an der Stelle crashen, sondern kann auch irgendwann später crashen.