Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#16

AW: Interface und 'normale' Referenz

  Alt 7. Sep 2010, 10:21
Hallo,
Dann muss eine Funktion, die ein IMachBuh Parameter als const nimmt trotzdem aufpassen, dass ein anderer Thread das Objekt nicht weglöscht, denn sie inkrementiert den Zähler überhaupt nicht ??
klar musst Du bei mehreren Threads aufpassen. Das ist aber kein spezifischer Interfaceproblem. Jeder Thread kann Objekte freigeben, die in einem anderen gerade verwendet werden. Das kannst Du nur ausschließen, wenn Du ausschließlich Interfaces verwendest, dann wird nämlich die Referenz in der aufrufenden Methode gehalten und das const ist damit nur eine Optimierung:

Delphi-Quellcode:
type
  IIntf = interface
    procedure Blubb;
  end;

  TIntf = class(TInterfacedObject, IIntf)
    procedure Blubb;
  end;

procedure bla;
var
  A: IIntf;
begin
  A := TIntf.Create; // Referenz 1

  Machwas(A); // keine Änderung
end; // hier Referenz 0 -> Objekt wird zerstört

procedure Machwas(const B: IInf) // Keine Änderung
begin
  B.Blubb; // hier kann jeder Thread etwas mit dem Interface machen, der Referenzzähler bleibt immer >= 1
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat