![]() |
AW: Destructor notwendig bei class?
Zitat:
Delphi-Quellcode:
MeineObjektListe.OwnsObjects = true;
// ... MeineObjektListe.Clear(); // gibt Listenelemente frei! |
AW: Destructor notwendig bei class?
Mensch, da habe ich ja eine Diskussion angestoßen :-)
Meine Frage ist jetzt dann folgende: Was ist schneller/"effektiver" wenn ich das Objekt und den Listeneintrag löschen möchte? Eine while Schleife über die ganze Liste und jedes Objekt freigeben und immer Liste.Delete(0) aufrufen (führt meines erachtens nach immer zum aufrücken der restlichen Objekte in der Liste) oder Eine for Schleife über die ganze Liste vom Anfang bis Ende der Liste und jedes freigeben und am Ende Liste.clear aufrufen? Gruß |
AW: Destructor notwendig bei class?
Ich würde definieren, was implementiert werden soll:
1. Gib ein Element frei und entferne es aus der Liste. 2. Gib alle Elemente frei und lösche den Inhalt der Liste. Für beide Methoden gilt die Eingangsbedingung: "Alle Elemente der Liste sind Instanzen gültiger Objekte". Dies ist gleichzeitig die Ausgangsbedingung, frei nach Sepp Herrberger: "Nach dem Spiel ist vor dem Spiel". Salopp ausgedrückt: Wenn die Liste vorher 'sauber' war, muss sie es hinterher auch sein. Innerhalb der Methode wird diese Bedingung immer irgendwie verletzt werden. Dies ist jedoch nur dann von Bedeutung, wenn die Liste threadsicher implementiert werden soll. Aber dann umschließt man die Operationen mit einem kritischen Abschnitt. Wichtig ist bei der Implementierung, das die vorher vereinbarten Bedingungen (Design by Contract) eingehalten werden.
Delphi-Quellcode:
Die TObjectList macht auch nichts anderes.
(* Kein Original-Delphi, eher Pseudocode ohne Schnick-Schnack*)
Procedure TMyList.RemoveElement(Element : TObject); Begin Assert (InnerList.IndexOf(Element)>=0,'Element is not a member of the list'); InnerList.Remove(Element); Element.Free; End; Procedure TMyList.RemoveAllElements; Var element : TObject; Begin Foreach element in InnerList do element.Free; InnerList.Clear; End; Leute, aber das ist sowas von banal. Das man sich darüber überhaupt in diesem Forum unterhält, ist schon grenzwertig. Wie lange braucht man dann für ein Projekt, wenn man sich schon bei diesem Kindercode nicht sicher ist? |
AW: Destructor notwendig bei class?
Kleiner Hinweis: In älteren Delphi-Versionen (incl. Delphi 2007) gibt es kein Foreach.
Man darf nicht immer nur sich und seine superneue Delphi-Version als Maßstab nehmen :-D Aber ich werd wohl in diesem Forum lieber nichts mehr schreiben, da man hier schreiben kann was man will, es treten immer irgendwelche Meckerer auf den Plan, die natürlich ALLES viel besser wissen und können.... |
AW: Destructor notwendig bei class?
Zitat:
Zitat:
Zitat:
Du hast deine Sichtweise dargelegt ("lieber auf die altmodische Tour aber [für Dich] auf Nummer sicher") und dagegen ist nichts einzuwenden. Man wird aber wohl noch auf die Scheuklappen aufmerksam machen dürfen, die man meint, bei dir zu sehen, oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 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