Knolle123 schrieb:
Ok, in diesem einfachen Fall, dass genau ein Konstruktor existiert, der genau einen Parameter besitzt, kann ich mir einen operator=(int val) definieren, dann hab ich 1 Konstruktor, 1 Destruktor und n Zuweisungen. Das ist aber ein recht simpler Fall, der garantiert sehr oft nicht zutrifft.
Es geht nicht darum, dass du einen operator=(int) haben solltest, sondern dass du dem Objekt vom Typ Test nicht ein Objekt eines anderen Typs zuweist, sondern ebenfalle ein Objekt vom selben Typ. Die Konvertierung ist unüblich.
Knolle123 schrieb:
Da wird z.B. über einen Ergebnissatz eines SQL-Query iteriert, und aus den einzelnen Spalten die Argumente für den Konstruktor gezogen.
Und was machst du mit diesen Objekten? Das ist hier ein ganz spezieller Fall. Denn hier wirst du wahrscheinlich explizit Objekte konstruieren wollen und sie in einem Container abspeichern. Also ist die Schleife explizit für die Konvertierung und das Befüllen eines Containers gedacht. Sowas sind meistens eher Initialisierungsaufgaben und daher kommen sie seltener vor.
Knolle123 schrieb:
Oder überseh ich was?
Naja, wie gesagt, dass es eben ein spezieller Fall ist. Du willst nicht Objekte in einer Liste bearbeiten oder Objekte gleichen Typs behandeln, sondern eine Liste intialisieren und entsprechende Daten konvertieren. Es ist daher verständlich, dass nur der Aufruf eines Konstruktors, was auch eine Art von Konvertierung ist, bessere Ergebnisse erzielen kann, als wenn du die Daten konvertierst und noch temporär zwischenspeicherst.
Aber auch übersehen tust du, dass ein Kompiler durchaus in der Lage ist zu optimieren.
Und ich verweise nochmals auf meine letzten paar Sätze. Es ist zum Teil schon von der Aufgabe oder den Klassen abhängig, wie man die Schleife aufbaut. Aber in den meisten Fällen ist der Unterschied nicht all zu gross oder man kann schlecht im voraus sagen, was schneller oder langsamer sein wird.
Grüssli