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