Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Problem mit automatischem freigeben von Interfaces

  Alt 20. Okt 2012, 19:13
Es gibt 2 sinnvolle Praktiken.
In die Referenzzählung würde ich nicht eingreifen, denn für denjenigen, der den Code liest, wäre das überraschend.
a) nur mit dem Interface arbeiten
Delphi-Quellcode:
procedure TOtherClass.Test(AFoo: IFoo);
begin
  AFoo.DoSomething();
end;

procedure TTestClass.Action();
var
  Foo: IFoo; // nicht das Objekt, sondern den Interfacezeiger speichern
  LOtherClass: TOtherClass;
begin
  Foo := TFoo.Create();
  LOtherClass := TOtherClass.Create();
  LOtherClass.Test(Foo);
  Foo.dosomethingmore(); // dosomethingmore() muss natürlich im Interface deklariert sein
end;
b.) wie a.) nur darf zusätzlich noch auf das Objekt zugegriffen werden
Delphi-Quellcode:
procedure TOtherClass.Test(AFoo: IFoo);
begin
  AFoo.DoSomething();
end;

procedure TTestClass.Action();
var
  Foo: IFoo; //
  FooObj : TFoo; //
  LOtherClass: TOtherClass;
begin
  FooObj := TFoo.Create();
  Foo := FooObj; // Achtung: FooObj darf nicht mit Free freigegeben werden
  LOtherClass := TOtherClass.Create();
  LOtherClass.Test(Foo);
  FooObj.dosomethingmore();
  ...
  FooObj := nil; // Zeile dient nur dazu uns daran zu erinnern, dass FooObj nicht mit Free freigegeben werden darf
end;
  Mit Zitat antworten Zitat