Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.039 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wie töte ich ein TAggregatedObject?

  Alt 10. Dez 2013, 13: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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat