Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt deinstanzieren (https://www.delphipraxis.net/41527-objekt-deinstanzieren.html)

Gambit 4. Mär 2005 17:28


Objekt deinstanzieren
 
Hallo,

in einer Form instanziere ich ein Objekt mit

Delphi-Quellcode:
MyList:= TStingList.create;
nun muss ich doch, wenn ich dieses Objekt nicht mehr brauche deinstanzieren, oder?

mache ich das am besten mit
Delphi-Quellcode:
MyList.free?
Wenn ich nun in einer anderen Form, zB. durch Abbruch, meine Strings, die in der Liste stehen gar nicht benutzt habe, aber auch nicht genau weiß, ob überhaupt welche drinstehen bzw. das Objekt gar nicht instanziert wurde, kann ich dann:

Delphi-Quellcode:
if FormSoUndSo.PictureList <> nil then
   begin
     FormSoUndSo.PictureList.Free;
     FormSoUndSo.PictureList:= nil;
   end;
oder wie geht das nun genau?

Gruß

Gambit

Muetze1 4. Mär 2005 17:33

Re: Objekt deinstanzieren
 
Moin!

1. Ja
2. Ja
3. Auch korrekt

Alles richtig.

Für deine 3. Frage noch 2 Zusätze:

Du kannst auch anstatt dem <> Nil Vergleich auch Assigned() nutzen:
Delphi-Quellcode:
If Assigned(ObjektVariable) Then
.

Und die zweite Sache: das .Free; und := Nil setzen gibt es auch in der SysUtils als eine Funktion: FreeAndNil()

MfG
Muetze1

sniper_w 4. Mär 2005 17:33

Re: Objekt deinstanzieren
 
Zitat:

Hallo,

in einer Form instanziere ich ein Objekt mit

MyList:= TStingList.create;


nun muss ich doch, wenn ich dieses Objekt nicht mehr brauche deinstanzieren, oder?
Richtig.
Zitat:

mache ich das am besten mit

MyList.free?
Richtig.

Zitat:

Wenn ich nun in einer anderen Form, zB. durch Abbruch, meine Strings, die in der Liste stehen gar nicht benutzt habe, aber auch nicht genau weiß, ob überhaupt welche drinstehen bzw. das Objekt gar nicht instanziert wurde, kann ich dann:
Delphi-Quellcode:
if FormSoUndSo.PictureList <> nil then
   begin
     FormSoUndSo.PictureList.Free;
     FormSoUndSo.PictureList:= nil;
   end;
oder wie geht das nun genau?

Gruß
Ich würde so empfehlen:
Delphi-Quellcode:
 if Assigned( ObjektVariable ) then .....
[EDIT]
:wall: Bin zu langsam.

Gambit 4. Mär 2005 17:39

Re: Objekt deinstanzieren
 
Wie, so?

Delphi-Quellcode:
if assigned(FormSoUndSo.PictureList) then
   begin
     FormSoUndSo.PictureList.Free;
     FormSoUndSo.PictureList:= nil;
   end;

Gambit 4. Mär 2005 17:42

Re: Objekt deinstanzieren
 
Also was ich nicht so richtig aufn Schirm kriege ist:

Warum muss ich noch auf Nil setzen, wenn ich vorher mit ObjektVariable.free deinstanziert habe. Ich dachte mit ObjektVariable.free würde der Speicher schon freigegeben. Und wann benötige ich ObjektVariable.destroy?

Khabarakh 4. Mär 2005 17:54

Re: Objekt deinstanzieren
 
Destroy solltest du gar nicht aufrufen, das macht Free ja für dich.
Mit Free hast du das Objekt zwar freigegeben, aber der Zeiger zeigt immer noch an die Stelle. Bei einer Abfrage auf nil (wie du es ja dann machst) knallt es dann nach dem Freigeben.

Gambit 4. Mär 2005 17:57

Re: Objekt deinstanzieren
 
comprendo, gracias...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 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