Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Speicherleaks TMemoryStream in einem Objekt

  Alt 17. Jan 2024, 14: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)
$2B or not $2B
  Mit Zitat antworten Zitat