Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Testen ob ein Objekt bereits erzeugt wurde (https://www.delphipraxis.net/143585-testen-ob-ein-objekt-bereits-erzeugt-wurde.html)

ThE_-_BliZZarD 18. Nov 2009 20:31


Testen ob ein Objekt bereits erzeugt wurde
 
Hallo liebe Delphigemeinde,

zwar simpel aber mir fällt es leider nicht mehr ein.

Wie kann ich testen, ob ein Objekt bereits erzeugt wurde?

Z.b.:

Delphi-Quellcode:
  private
    { Private-Deklarationen }
    FMyTestSList: TStringList;

  // [...]
  implementation

procedure TMyTest.DoSomething();
begin
   // hier würde ich jetzt gerne testen ob das Objekt bereits durch
   FMyTestSList := TStringList.Create;
   // erzeugt wurde, und nur wenn dies noch nicht geschehen ist den Create() Befehl ausführen.

end;
Ich habe es mal probeweise mit SizeOf() probiert, was aber wie erwartet nichts sinnvolles ergeben hat.


Mit freundlichen Grüßen,

BliZZarD

freak4fun 18. Nov 2009 20:38

Re: Testen ob ein Objekt bereits erzeugt wurde
 
Delphi-Quellcode:
if not Assigned(FMyTestSList) then
  FMyTestSList := TStringList.Create;

ThE_-_BliZZarD 18. Nov 2009 20:42

Re: Testen ob ein Objekt bereits erzeugt wurde
 
*Kopf-meets-Tischplatte*

Ok danke, ich wusste doch das es einfach war :oops:

// Noobfrage schließen

himitsu 18. Nov 2009 20:47

Re: Testen ob ein Objekt bereits erzeugt wurde
 
Delphi-Referenz durchsuchenAssigned(obj) entspricht bei Objekten einem (obj <> nil).

PS: das geht aber nur, wenn vorher die Variable auch "genullt" war.
(als Feld in einem Objekt ist dieses zum Glück standardmäßig der Fall, ansonsten mußt du explizit vorher obj:=nil; setzen)

Und Freigegeben wird das Objekt dann mit FreeAndNil(obj) (oder wieder von Hand obj.Free; und obj:=nil; ), also wenn nach dem Freigeben nochmals geprüft werden soll.

generic 18. Nov 2009 20:51

Re: Testen ob ein Objekt bereits erzeugt wurde
 
Wenn du erreichen willst, dass ein Objekt nur einmal erzeugt wird, dann solltest du dir das Design Pattern "Singleton" anschauen.

mjustin 19. Nov 2009 09:55

Re: Testen ob ein Objekt bereits erzeugt wurde
 
Zitat:

Zitat von generic
Wenn du erreichen willst, dass ein Objekt nur einmal erzeugt wird, dann solltest du dir das Design Pattern "Singleton" anschauen.

Und dabei auch sicherstellen dass nicht zwei Threads das gleiche Singleton erstellen können - im RTL Code wird das selbst bei so simplen Dingen wie TEncoding.UTF8 (auch ein Singleton) gemacht, die einen unveränderbaren Zustand haben :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.

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