Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bin ich schon zerstört? (https://www.delphipraxis.net/56601-bin-ich-schon-zerstoert.html)

Sidorion 8. Nov 2005 15:51


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.

-NIP- 8. Nov 2005 16:01

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.

Bernhard Geyer 8. Nov 2005 16:01

Re: Bin ich schon zerstört?
 
Wie wird die Instanz zerstört?
Kann diese Instanz evtl. die entsprechende Referenz auf nil setzen?

DGL-luke 8. Nov 2005 16:02

Re: Bin ich schon zerstört?
 
Delphi-Quellcode:
if assigned(myobj) then
 dosomething;
wenn der zeiger anständig nil gesetzt wurde nach dem zerstören.

Sidorion 8. Nov 2005 16:07

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.

phXql 8. Nov 2005 16:48

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...

Khabarakh 8. Nov 2005 16:51

Re: Bin ich schon zerstört?
 
Zitat:

Zitat von phXql
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...

Wenn das so wäre, wäre Free ziemlich sinnlos :wink: .

phXql 8. Nov 2005 16:53

Re: Bin ich schon zerstört?
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von phXql
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...

Wenn das so wäre, wäre Free ziemlich sinnlos :wink: .

Bei Free hat man ja auch schon eine Instanz, die man freigeben will ;)

SirThornberry 8. Nov 2005 17:08

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:
TKlasse(nil).Methode;
In diesem fall ist dann nur "Self" innerhalb der Methode nil

Khabarakh 8. Nov 2005 17:13

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 13:02 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz