ist der Referenzzähler von Interfaces Thread sicher?
Interfaces in Delphi haben keinen Referenzzähler. Die konkreten Klassen wie z.B. TTinterfacedObject, TInterfacedPersistent oder TComponent sorgen für die Referenzzählung - daher muss man wissen, wie diese implementiert ist, um Probleme mit Threads oder Speicherlecks zu vermeiden.
- Bei TTinterfacedObject kann man im Code direkt sehen, dass threadsicher vorgegangen wird
- Bei TTinterfacedPersistent wird die Referenzzählung an ein 'FOwnerInterface' Feld delegiert (das vorhanden sein kann aber nicht muss...)
- Bei TComponent wird eine Referenzzählung an ein IVCLComObject delegiert, falls es vorhanden ist
Es gibt noch weitere Varianten der Referenzzählung (zum Beispiel bei der TRemotable für
Soap). Interfaces in Delphi erlauben Freiheiten bei der Implementierung, die es in anderen Sprachen nicht gibt - wer mag, kann das natürlich auch als Vorteil sehen.