Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Freigabe von Objekten (Observerpattern)

  Alt 21. Mai 2014, 13:03
Willkommen in der DP
Zitat:
Wenn das normale Objekt(befindet sich in einem Array) mit .free /.freeandnil / .destroy freigegeben wird,
wird das ObjektX scheinbar mitgelöscht, wodurch es beim Erstellen eines neuen
normales Objekts zu einer Zugriffsverletzung kommt.
Den Abschnitt verstehe ich nicht ganz. Was ist das „Objekt“, und was ist das „ObjektX“? Ist beides das gleiche Objekt, sind es unterschiedliche Objekte? Wo wird was „mitgelöscht“ und was heißt hier „scheinbar“?

Grundsätzlich kann man die automatische Freigabe eines Objektes hinter einem Interface verhindern, indem man manuell seine Methode AddRef aufruft. Dadurch wird der Referenzzähler um 1 erhöht und somit nicht 0 (was eine Zerstörung des Objekts auslösen würde), nachdem das letzte Interface gelöscht wurde.

Aber, meine Empfehlung: Wenn Interfaces, dann konsequent. Nicht Interfaces mit normalem Objektzugriff mischen. Das macht nur Kopfschmerzen. Also stell lieber die Stellen, wo du noch direkt auf das Objekt zugreifst, auch auf Interfaces um, dann hast du das Problem nicht und die Referenzzählung erledigt alles automatisch (nur bei zyklischen Referenzen musst du aufpassen).
  Mit Zitat antworten Zitat