![]() |
Variable mit Instanz belegt oder nicht???
Hallo!
Ich habe in einer Klasse eine Variable, in der eine Instanz einer anderen Klasse gespeichert werden kann. Dort muss aber keine Instanz gespeichert sein. Wie bekomme ich nun raus, ob in der Variable eine Instanz gespeichert ist, oder nicht??? Ich möchte die Instanz der ersten Klasse löschen, zuvor aber noch falls vorhanden, die in der Variable liegende Instanz der anderen Klasse. |
Re: Variable mit Instanz belegt oder nicht???
|
Re: Variable mit Instanz belegt oder nicht???
Danke!
|
Re: Variable mit Instanz belegt oder nicht???
Assigned ist zwar eine Bedingung
aber keine hinreichende Bedingung um auf die Existenz einer Instanz zu schließen.
Delphi-Quellcode:
Hier wäre eine Zugriffsverletzung das Resultat.
Procedure Wegdamit(o:tObject);
Begin o.free; end; ObjVariable1 := TMeinObject.create; ObjVariable2 := ObjVariable1; Wegdamit(ObjVariable1); (* Hier viele Objekte erzeugen *) If assigned(ObjVariable2) then Showmessage(ObjVariable2.MeinStringAttribut); Das ist aber nicht immer so nur wenn der Speicher, der ja mit o.free freigegeben wurde, schon von anderen Objekten überschrieben wurde tritt der Fehler auf. |
Re: Variable mit Instanz belegt oder nicht???
Das Problem hat man nicht, wenn man den Zeiger noch auf nil setzt - oder gleich
![]() |
Re: Variable mit Instanz belegt oder nicht???
Lucky , dann must du aber wissen wie viele Zeiger du auf das Object
hast und welche das sind. In diesem Fall Waren es 2. Und eine FreeAndNil (oder bla.free; bla := nil; für Properties) Hilft dir bei Object Parametern auch nicht viel weiter, die Variabeln ausser halb der Methode haben weiterhin ihren Wert. Das Einzige was hilft ist es IInterface mit _AddRef und _Release zu implementieren. Oder man Prüft genau was man da programmiert, so das Objekte die an einem bestimmten Ort erzeugt werden auch nur an einem (also Zentral) bestimmten Ort im Code zerstört werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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