AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Instanz Klasse einfach weg

Ein Thema von freimatz · begonnen am 5. Feb 2019 · letzter Beitrag vom 5. Feb 2019
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Instanz Klasse einfach weg

  Alt 5. Feb 2019, 12:38
Aber: Wie hat sich der Erfinder das gedacht?
Na ja, er hat sich gedacht, daß vielleicht jemand im Create irgendwas mit der Interface-Referenz macht, das den Referenzzähler hoch und wieder runter zählt. Wäre der Referenzzähler bei Beginn des Create = 0 würde das beim Runterzählen ein unerwünschtes Destroy auslösen. Da das NewInstance direkt vor und das AfterContstruction direkt nach der Create-Kette ausgeführt wird, erhöht er den RefCount vorher künstlich und erniedrigt ihn hinterher ohne das Destroy auszulösen (also eben nicht mit _AddRef bzw. _Release).

Er hat vermutlich nicht damit gerechnet, daß jemand das AfterConstruction überschreibt und darin außerhalb dieser Klammer (also nach dem inherited) mit dem Interface rumhantiert.

Übrigens: Für das Destroy gibt es so eine Sicherung interessanterweise nicht. Hantieren mit Interfaces innerhalb des Destroy eines TInterfacedObject ist also ebenfalls zum Scheitern verurteilt. Deswegen arbeite ich in der Regel mit einer eigenen Ableitung, die lediglich das BeforeDestruction ergänzt und den RefCount auf 1 setzt:
Delphi-Quellcode:
begin
  inherited;
  FRefCount := 1;
end;

Ich finde es an sich ja schon logisch, dass man in AfterConstruction zuerst inherited aufruft und dann erst das eigene macht.
Das kann man so pauschal nicht sagen. Je nach Situation kann/soll/muss das inherited vorher, hinterher oder zwischendrin aufgerufen werden - manchmal sogar gar nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz