Das
implementieren eines Interfaces (IMyInterface) kann man in C++ tatsächlich mit dem
Merfacherben einer puren abstrakten Klasse (IMyInterface) vergleichen, allerdings wäre diese pure abstrakte Klasse wiederum von der abstrakten Klasse
IInterface abgeleitet, die drei abstrakte Methoden (
_AddRef,
_Release und
QueryInterface) einführt und den Zuweisungsoperator
operator = () in der Form überlädt, dass eine Zuweisung eines Objekts (
!=null eq <>nil) die vom Erben zu implementiernde Methode
_AddRef aufruft und das aufheben einer Referenz (bzw Zuweisen von
nil) die vom Erben zu implementiernde Methode
_Release aufruft (Referenzzählung).
Der Compiler sorgt darüber hinaus dafür, dass diese "Zuweisung mit
nil" (durch
Try..Finally geschützt) auch beim Verlassen des Gültigkeitbereichs durchgeführt wird, ähnlich dem C++ Konzept der SmartPointer (tatsächlich gibt es mit
TInterfacedObject bereits ein Objekt, dass sich "selbst freigibt").
Suche einfach mal im Forum nach
Interface etc, hier wurden oft schon gute Erklärungen für Einsteiger verfasst.
Eine kleine Anmerkung zur beschriebenen Lösung mit
TMyFrame (s.o.): Die Klasse
TComponent implementiert bereits die von
IInterface (bei Deinem D5 heißt es
IUnknown) geforderten Methoden und führt zur Referenzzählung (im Normalfall) eine Dummyoperation aus.