![]() |
AW: Objekte / Freigaben / Free / Nil
In dem Fall vielleicht nicht. Aber angenommen, man iteriert rein über den Index über eine Liste und
Delphi-Quellcode:
lässt nun alles nach Stelle 34 aufrücken? Dann doch wohl.
meineListe.EntferneEintragMitNummer(34)
|
AW: Objekte / Freigaben / Free / Nil
Zitat:
EDIT : Aber solltest du im Destroy nicht einen TypeCast auf TMyOwnObject machen? FreeAndNil(TMyOwnObject(Objects[i])) |
AW: Objekte / Freigaben / Free / Nil
Ok, danke für die Hinweise.
Mich interessiert natürlich jetzt noch das Thema mit dem FreeAndNil(tmpObj) und dem Object was noch später verfügbar ist. Bzw. Wie gibt man die Objecte innerhalb der Liste denn richtig frei? Gruß |
AW: Objekte / Freigaben / Free / Nil
Um den Knoten aufzulösen: Löschen mehrerer Elemente in einer Liste sollte man bei einer For-Schleife rückwärts machen, um Indexfehler zu vermeiden, da die Schleifenanzahl dort nur einmalig ermittelt wird. Alternativ kann man auch eine While-Schleife benutzen:
Delphi-Quellcode:
Beim Ändern von Elementen ist es im Normalfall egal, ob man das vorwärts oder rückwärts macht, es sei denn, die Liste löscht in bestimmten Fällen selbstständig Einträge. Sofern man sich nicht sicher ist: rückwärts durchlaufen, dann kann man nicht viel falsch machen.
while Liste.Count > 0 do
Liste.Delete(0); |
AW: Objekte / Freigaben / Free / Nil
Du kannst dir bei XE4 die Ableitung von TStringList sparen, wenn du deren property OwnsObjects auf true setzt. Damit gibt die Liste beim Löschen von Elementen und somit auch im eigenen Destroy auch die Objects frei.
|
AW: Objekte / Freigaben / Free / Nil
Zitat:
|
AW: Objekte / Freigaben / Free / Nil
Ich muss allerdings TStringList ableiten, da ich noch ein paar andere Funktionen nachgepflegt habe in meiner abgeleitetn TStringList.
Reicht es dann, wenn ich in meiner abgeleiteten Liste das OwnObjects auf True setze? Gruß |
AW: Objekte / Freigaben / Free / Nil
Zitat:
|
AW: Objekte / Freigaben / Free / Nil
Ich habe jetzt folgendes geändert aber das globale Objekt ist immernoch verfügbar:
Delphi-Quellcode:
Also hat sich eigentlich nichts dadurch geändert.
destructor TFreeObjList.Destroy;
Var i : Integer; TmpObj : TObject; begin {for i:=0 to Count-1 do begin TmpObj := Objects[i]; if Assigned(TmpObj) then FreeAndNil(TmpObj); end; } Inherited Destroy; end; procedure TForm4.FormCreate(Sender: TObject); begin MyObjList := TFreeObjList.Create; MyObjList.OwnsObjects := True; end; Was habe ich denn falsch gemacht bzw. falsch verstanden? Gruß |
AW: Objekte / Freigaben / Free / Nil
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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