Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: GDI+: IStream oder TStreamAdapter

  Alt 20. Aug 2012, 20:07
Objektreferenzen sind nicht mir einer Referenzzählung versehen ... niemals.
Also wird Delphi da auch niemals _AddRef aufrufen.

Bei Übergabe an den Constructor, als Interface, wird bei Aufruf des Constructor eine Interface-Referenz erstellt und demnach auch _AddRef aufgerufen.
Bei Austritt aus dem Custructor wird diese Referenz nicht mehr benötigt und _Release aufgerufen, womit die Referenzählung runterzählt, auf 0 kommt und das Interface/Objekt freigibt.

Antwort: Kombiniere niemals Objektreferenzen mit Interfacereferenzen. (nicht ohne die Referenzzählung für diesen Fall außer Kraft zu setzen),
denn Objektreferenzen werden immer über Free/Destroy freigegeben und Interfaces geben sich selber frei (durch die Referenzzählung ausgelöst) und des darf niemals mehrere "Owner" geben (wenn diese nicht alle voneinander wissen und sich gegenseitig Benachrichtigen, wenn einer alles auflöst, bzw. nicht ohne die anderen Owner irgendwie über die zusätzlichen Referenzen in den Ownern zu informieren).

In diesem Fall wird ein Interface (IStream) benötigt, also sollte auch ausschließlich nur mit Interface-Referenzen gearbeitet werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Aug 2012 um 20:13 Uhr)
  Mit Zitat antworten Zitat