![]() |
Frage zu .free bei Klassen
Ich habe eine Klasse TStringManager, die unter anderem das hier enthält:
Delphi-Quellcode:
Initialize erzeugt die Listen, z.B FNummernListe:= TStringList.Create;
type
TStringManager = class(TObject) // Kapselt private // Stringverarbeitung FNummernListe : TStringlist; // Liste aller Nummern FOrteListe: TStringList; FDatumsListe: TStringList; // Liste aller Daten procedure Initialize; // Listen werden erstellt procedure Close; In der Prozedur Close; wollte ich nich diese Listen wieder freigeben mit FNummernListe.Free usw. Im OnCreate meiner Form wird StrMg:= TStringManager.Create; aufgerufen und im OnClose meiner Form:
Delphi-Quellcode:
Lasse ich StrMg.Close nämlich weg geht es ohne Fehlermeldung, mit der Zeile kommt eine AV.
StrMg.Close; // <== Ist das hier nötig, die Listen innerhalb der Klasse zu löschen oder
StrMg.Free; // reicht diese Zeile ? |
Re: Frage zu .free bei Klassen
Tu dein Zeug in den Constructor und den Destructor, dann hast du wenigstens was davon und musst nicht ewig oft mit diesen sinnlosen Extramethoden rumfummeln.
|
Re: Frage zu .free bei Klassen
Kannst du posten wie das dann aussähe?
|
Re: Frage zu .free bei Klassen
Delphi-Quellcode:
Das sollte man als OOPer aber wissen.
type
TStringManager = class private {Felder} public constructor Create; destructor Destroy; override; end; constructor TStringManager.Create; begin // Felder erstellen // also der Initialize-Code end; destructor TStringManager.Destroy; begin // der Close-Code inherited; end; |
Re: Frage zu .free bei Klassen
Habe noch nicht viel Erfahrung mit OOP , drum danke.
|
Re: Frage zu .free bei Klassen
Ok habe es jetzt so gemacht, das Problem besteht aber weiterhin.
Muss ich im destructor die einzelnen Listen ".free" en oder nicht? Wenn ich es mache kommt eine AV, wenn nicht geht es. |
Re: Frage zu .free bei Klassen
Wurden die Listen vielleicht schon vorher freigegeben, oder verwendest du vielleicht sogar ein nicht instanziiertes Objekt? Anders ist dieses Verhalten nicht erklärbar.
Tip: Statt .Free lieber FreeAndNil nehmen ;) Tut nix anderes, aber ein erneutes Free dafür nix mehr, also keine AVs (falls es daran lag) |
Re: Frage zu .free bei Klassen
Verwende jetzt FreeAndNil() aber der Fehler kommt immernoch. Es muss also daran liegen
Zitat:
|
Re: Frage zu .free bei Klassen
Zitat:
Delphi-Quellcode:
Ob man jetzt die entsprechende Prozedur nutzt oder es selbst macht (oder den Destructor verwendet) bleibt jedem selbst überlaseen.
MyObj.Free;
MyObj := nil; |
Re: Frage zu .free bei Klassen
Ein bisschen mehr Code könnte ein bisschen mehr helfen ;) Oder ist dein Projekt fürs Militär? :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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