Delphi-PRAXiS

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 Variable mit Instanz belegt oder nicht??? (https://www.delphipraxis.net/37317-variable-mit-instanz-belegt-oder-nicht.html)

stoermi 4. Jan 2005 13:38


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.

dizzy 4. Jan 2005 13:46

Re: Variable mit Instanz belegt oder nicht???
 
Delphi-Referenz durchsuchenAssigned()

stoermi 4. Jan 2005 13:51

Re: Variable mit Instanz belegt oder nicht???
 
Danke!

QuickAndDirty 4. Jan 2005 14:40

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:
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);
Hier wäre eine Zugriffsverletzung das Resultat.
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.

Luckie 4. Jan 2005 14:50

Re: Variable mit Instanz belegt oder nicht???
 
Das Problem hat man nicht, wenn man den Zeiger noch auf nil setzt - oder gleich Delphi-Referenz durchsuchenFreeAndNil benutzt

QuickAndDirty 4. Jan 2005 15:03

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