Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
Delphi 12 Athens
|
AW: Wie töte ich ein TAggregatedObject?
10. Dez 2013, 14:33
Da TAggregatedObject nicht über die Referenzzählung freigegeben wird, spricht nichts gegen eine lokale Instanz der entsprechenden Klasse innerhalb deiner Monster-Klasse. Da die Monster-Klasse für die Freigabe der Instanz verantwortlich ist, entspricht das auch dem gewünschten Design.
Gegen eine Speicherung in einer Interface-Variable spricht, daß du dir damit eine unerwünschte Referenzzählung einhandelst, die ein Freigeben der Monster-Instanz eigentlich verhindert, was du ja auch mit dem self._Release ausgleichst (müffelt halt etwas).
Es ist auch durchaus korrekt, wenn du das Feld als mySubInterfaceDelegate: TMyInterfaceDelegate
deklarierst. Damit kannst du deine getMyInterfaceDelegate
Funktion nämlich fasst so belassen wie sie ist.
Grundsätzlich (sprich: ich kenne bisher keine Ausnahme) kann man sagen, daß bei zusammengesetzten Objekten mit TAggregatedObject
und TContainedObject
immer die passenden Klassen als lokale Felder deklariert werden sollten.
Der explizite _Release
-Aufruf sollte bei einem selbst schon eine Warnung auslösen daß etwas nicht korrekt ist. In Delphi werden _AddRef
und _Release
eher selten direkt aufgerufen.
|