![]() |
Bin ich schon zerstört?
Kann man irgendwie herausfinden, ob die aktuelle Instanz bereits zerstört ist?
Im besonderen Fall rufe ich bei einer eventuell schon zerstörten Instanz eine Methode auf, wobei in dieser Methode auf einen Member der Instanz zugegriffen wird. In der momentanen Implementierung ist dieser Methodenaufruf mit einem try .. except- Block gesichert, mich nerven aber die trotzdem auftretenden Delphi-exceptions mit Anhalten des Debuggers (nein ich will nicht 'bei Delphi-exceptions stoppen' ausschalten). Ziel der Übung wäre, in der gerufenen Methode der evtl. schon zerstörten Instanz, eben diesen 'zerstört Status' abzuprüfen, ohne mit try except zu arbeiten und nur auf den Member zuzugreifen, falls die Instanz noch lebt. |
Re: Bin ich schon zerstört?
Wenn mich nicht alles täuscht kann die Komponente doch garkeine Methode mehr ausführen, falls sie schon zerstört wurde?
Ich kenne nur Methoden, die es vor dem Createn ausführen kann. |
Re: Bin ich schon zerstört?
Wie wird die Instanz zerstört?
Kann diese Instanz evtl. die entsprechende Referenz auf nil setzen? |
Re: Bin ich schon zerstört?
Delphi-Quellcode:
wenn der zeiger anständig nil gesetzt wurde nach dem zerstören.
if assigned(myobj) then
dosomething; |
Re: Bin ich schon zerstört?
@-NIP-: Methoden einer Klasse können IMMER ausgeführt werden, allserdings kann man auf die Member nur zugreifen, wenn ne instanz da ist.
@Bernhard: Die Instanz wird ganz normal zerstürt, habe aber zwei Zeiger drauf und die wissen voneinander nix. @DGL-Luke: darum ist Assigned(MyObj) in dem Falle nach wie vor true, das ist ja das Problem. Wenn nicht, würd ich die Methode ja nicht mehr rufen. |
Re: Bin ich schon zerstört?
methoden einer klasse können nur aufgerufen werden wenn sie static sind.. die "anderen" methoden kann man nur aufrufen, wenn man auch eine instanz hat...
|
Re: Bin ich schon zerstört?
Zitat:
|
Re: Bin ich schon zerstört?
Zitat:
|
Re: Bin ich schon zerstört?
man kann aber auch einfach auf eine "nil" instanz eine methode anwenden. Solange in der Methode (wie schon geschrieben wurde) nicht auf membervariablen zugegriffen wird kommt es da auch nicht zum Fehler.
Delphi-Quellcode:
In diesem fall ist dann nur "Self" innerhalb der Methode nil
TKlasse(nil).Methode;
|
Re: Bin ich schon zerstört?
Genau. Es wäre ja wirklich sinnlos, wenn in Free Self auf nil geprüft wird, aber schon beim Methodenaufruf wegen Self = nil eine Exception ausgelöst würde.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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