![]() |
Gibt TObject Speicherplatz wieder frei ?
Hi,
ich habe hier eine Prozedur, deren Parameterliste wird immer größer. Die habe ich jetzt umgebaut in ein TObject. Brauche 2 Methoden und die vorherigen Paramter sind nun Felder vom TObject. Die Delphi-Hilfe ist nun recht knapp und etwas irreführend. Offensichtlich muß ich die Dinger mit Create erzeugen, aber wie siehts mit der Freigabe aus ? |
Re: Gibt TObject Speicherplatz wieder frei ?
moin Hansa,
vllt
Delphi-Quellcode:
raik
DieDinger.free
|
Re: Gibt TObject Speicherplatz wieder frei ?
"Wer was erzeugt, ist auch für die Freigabe verantwortlich".
Du musst das Objekte selber mit .Free wieder freigeben. Am besten macht das die Funktion bzw. das übergeordnete Objekt, das auch dein Hilfobjekt erzeugt hat. |
Re: Gibt TObject Speicherplatz wieder frei ?
Delphi-Quellcode:
;)
procedure DoSomething (Obj: TMyObj);
begin Obj.DoSomethingElse; Form1.Caption := Obj.Text; end; // ... begin Obj := TMyObj.Create; Obj.FillWithData; DoSomething (Obj); Obj.Free; end; Hilft dir das ? |
Re: Gibt TObject Speicherplatz wieder frei ?
Mann, seid ihr flott. :mrgreen:
Aber was hat das hier zu bedeuten : Zitat:
|
Re: Gibt TObject Speicherplatz wieder frei ?
also Create nicht direkt aufrufen :shock:
Ich glaube, das Risiko kannst du eingehen ;) .Destroy gibt den Speicher frei, .Free:
Delphi-Quellcode:
freeAndNil:
if xyz <> nil then
yxz.Destroy
Delphi-Quellcode:
(in etwa ;))
xyz.free;
xyz := nil; |
Re: Gibt TObject Speicherplatz wieder frei ?
Den Konstruktor aufrufen bedeutet
Delphi-Quellcode:
Den Konstruktor explizit aufrufen wäre
obj := TObject.Create;
Delphi-Quellcode:
;)
obj.Create
|
Re: Gibt TObject Speicherplatz wieder frei ?
Habe die erste Variante verwendet. Aber, wie gesagt, es geht um das danach, also das freigeben.
|
Re: Gibt TObject Speicherplatz wieder frei ?
:shock: Wie kann man 5000 Beiträge in einem Delphi-Forum sammeln ohne...schon gut. Resourcenschutzblock nicht vergessen. :warn:
Delphi-Quellcode:
Wenn das Objekt im Constructor Instanzen von anderen Klassen erzeugt, müssen die unbedingt im Destructor wieder freigegeben werden.
procedure foo;
var Inst: TMyObject; begin //Instanz erzeugen Inst := TMyObject.Create; try //Etwas machen, das eine Exception auslösen kann Inst.DoSomething; finally //Sicherstellen, dass das Objekt freigegeben wird Inst.Free; end; //Ab hier nicht mehr auf Inst zugreifen, sonst AV end;
Delphi-Quellcode:
edit: fehler im code beseitigt
type
TMyObject = class(TObject) private FStrings: TStrings; procedure SetStrings(Value: TStrings); public constructor Create; destructor Destroy; override; published property Strings: TStrings read FStrings write SetStrings; end; implementation constructor TMyObject.Create; begin inherited; FStrings := TStringlist.Create; end; destructor TMyObject.Destroy; begin FStrings.Free; inherited; end; procedure TMyObject.SetStrings(Value: TStrings); begin If Assigned(Value) then FStrings.Assign(Value); end; |
Re: Gibt TObject Speicherplatz wieder frei ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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