Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#35

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 16. Mär 2007, 22:06
Zitat von OldGrumpy:
@bernau, lies nochmal genau das Tutorial, dann findest Du sicher die Begründung warum es eben NICHT immer egal ist
Solche Antworten veranlassen mich eigendlich immer sofort eine Diskussion abzubrechen und nicht mehr zu antworten. Ich kommer mir dabei immer vor wie im Kindergarten. Warum kann man es nicht auf den Punkt bringen und folgendermassen antworten:

Zitat von So wünsche ich mir die Antwort:
@bernau, lies nochmal genau das Tutorial, im Abschnitt "Den Speicher verwalten" im dritten Absatz steht steht die Begründung warum es eben NICHT immer egal ist
Ich kann leider keine Gedanken lesen. Deshalb kann ich nur vermuten, daß du diesen Absatz meinst.

Erst geht man die Liste durch und gibt alle in ihr enthaltenen Objekte frei. Dann gibt man die Liste selber frei. Wichtig ist, dass die Schleife rückwärts laufen muss, da die Eingangsbedingung einer for-Schleife nur beim Eintritt in die Schleife geprüft wird, aber in der Schleife entfernen wir ja Elemente, so dass wir, wenn die Schleife vorwärts liefe, über die Anzahl der Elemente hinauslaufen würden.

Nur ist diese Aussage schlichtweg falsch. In dem Beispiel werden in der Schleife lediglich die Objekte freigegeben. Die Menge der Elemente verändert sich nicht, da kein Delete aufgerufen wird. Daher ist es tatsächlich egal, ob die Schleife vorwärts oder rückwärts läuft. Wie du es ja selber geschrieben hast:

Zitat von OldGrumpy:
Du führst doch nur ein Free() aus und kein Delete()
Es ist schon klar, daß man eine Schleife nicht vorwärts laufen lassen darf, wenn in der schleife die Elemente durch ein Delete entfernt werden.

Aber ich habe mich ja auf das Beispiel von Luckie bezogen. Und bei diesem Beispiel ist es tatsächlich egal ob vorwärts oder rückwärts. Einen Fehler wird's nicht geben. Mich hat eben nur interessiert ob es für dieses Beispiel tatsächlich einen Grund geben könnte, die Schleife in eine bestimmte Richtung laufen zu lassen.

Der einzige Grund hierbei rückwärts zu zählen ist IMHO, daß eine Prüfung des Schleifenzählers auf 0 schneller verarbeitet wird, als die Prüfung, ob der Schleifenzähler eine bestimmte Zahl erreicht hat. Aber ob daß tatsächlich ein ausschlaggebender Punkt ist, bezweifele ich.

Aber vieleicht gibt's ja tatsächlich noch andere Gründe.


Gerd
  Mit Zitat antworten Zitat