2011-01-04 9 views
0

Oft bin ich über eine Situation gekommen, wo es eine Schleife gibt und ein neues Objekt am Anfang der Schleife konstruiert und einer Sammlung hinzugefügt wird. Zum Beispiel, Pseudocode:Erholung oder Reinitialisierung?

iterating over a resultset do 
    create an object 
    set instance data in object to some resultset data 
    put object in collection 
next 

Wie ist dieser Ansatz stattdessen?

create an object 
iterating over a resultset do 
    set instance data in object to some resultset data 
    put object in collection 
next 

Was sind die Vor- und Nachteile der beiden Ansätze? Was kann schneller sein? Gibt es einen besseren Weg als die beiden?

P.S. : Ich weiß nicht, welche Tags zu setzen. Entschuldigung.

Antwort

0

Je nach der Sprache, die Sie zum Implementieren verwenden, erhalten Sie andere Ergebnisse. Einige Sprachen geben einen Verweis auf ein Objekt zurück. Die erste Option erfüllt also Ihre Erwartungen, da ein neues Objekt erstellt und mit eigenen Werten an die Sammlung angehängt wird.

iterating over a resultset do 
    create an object 
    set instance data in object to some resultset data 
    put object in collection 
next 

Aber wenn die Sprache gibt einfach einen Verweis auf ein Objekt und Sie versuchen und die zweite Methode

create an object (x) 
iterate over resultset do 
    set instance data in object (x) to resultset data (returns a reference to x with updated data) 
    put object in collection (puts a reference to x in collection) 
next 

So nach dem resultset Iterieren Sie mit einem Bündel von Referenzen auf das gleiche wird am Ende Objekt in Ihrer Sammlung, mit den Werten, die zuletzt zugewiesen wurden.

0

Ihr letzter Pseudo-Code soll wie:

create an object 
iterating over a resultset do 
    set instance data in object to some resultset data 
    **clone** object into collection 
next 

Da sonst würden Sie einfach mit so vielen Kopien des endgültigen Objekts am Ende, da Sie das gleiche Objekt gehalten ändern, die Sie Verweise auf hinzugefügt. Sie speichern also keinen Objektbereich und keine Erstellungszeit. Die zweite Methode ist perfekt, wenn Sie aus irgendeinem Grund nicht jede Schleife neu initialisieren möchten, z. B. wenn Sie für jede Schleife, die Sie initialisieren müssen, weniger Mitglieder ändern müssen. Stellen Sie nur sicher, dass der Kopierkonstruktor Ihres Objekts robust ist.

Verwandte Themen