Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#26

AW: Speicherleaks TMemoryStream in einem Objekt

  Alt 17. Jan 2024, 13:05
Das Problem ist halt, dass man nicht-referenzgezählte Objekt-Instanzen und Interfaces niemals gleichzeitig auf das "selbe" Objekt haben darf/sollte.

Bzw. bei TComponent ist es "standardmäßig" so, dass optional anhängbare Interfaces nicht referenzgezählt sind.
Jene sollte/darf man somit auch immer nur kurz benutzen und die Interface-Instanz sofort wieder freigeben.
Da hier ausschließich das Objekt die Speicherverwaltung übernimmt, also Free, der Owner, sowie auch der Parent (hat sich Delphi leider von der GDI abgeguckt).

Die Interface-Refrenz wird bei TComponent-Nachfahren also "ungültig", wenn das Objekt freigegeben wird.
Ein NIL zuweisen geht danach dann auch nicht mehr, sowie wenn die Variable aus dem Scope rausläuft, da es versuchen würde IInterface._Release auszuführen, was aber nicht mehr ginge.
Hier sollte man dann am Besten mit [Weak]-Referenzen arbeiten (was aber fast niemand tut).

Hätte man dagegen ein referenzgezähltes Interface, dann würden Jene das Objekt freigeben und die Objekt-Referenzen wären plötzlich alle ungültig.

Zusammen mit ARC wäre so ein Mischbetrieb aber möglich. (wobei ich dennoch froh bin, dass ARC wieder gestorben ist, weil es andere konzeptionelle Nachteile hatte)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat