Kurze Frage zur Initialisierungsliste
-
Hallo,
kurze Frage:
Ich verstehe es richtig, dass die Initialisierungsliste (also, wenn man über den :-Operator initialisiert) die Daten schneller verarbeitet, als wenn es in dem Definitionsbereich in den geschw. Klammern getan wird? Grund dafür ist dass, wenn es nicht mit besagter Liste abläuft, der Compiler einen Standard-Konstruktor selbst generiert und die Member erst mal undefiniert sind, bis sie dann durch die Initialisierungen überschrieben werden?Dann meine eigentliche Frage:
Wo schreibt man die Initialisierungsliste hin? In den Header, oder in die .cpp?Beste Grüße
Martin
-
Sie schreibt man in die cpp.
Und werden Variablen nicht in der Initialiserungsliste initialisiert, wird zuerst der Defaultkonstruktor aufgerufen und dann der Inhalt mit dem Assignment operator überschrieben. Und das erste, was der Assignmentoperator so mancher UDTs macht, ist den Inhalt zu löschen, der im Def-Ctor gesetzt wurde.
Außerdem muss man Konstanten und Referenzen in der Initialisierungsliste initialisieren.
-
Vielen Dank für die schnelle und kompetente Antwort! Ich meinte in meinem Beitrag auch Defaultkonstruktor.. Werde mir nochmal die Begrifflichkeit genauer aneignen.
-
martini3k1 schrieb:
Ich verstehe es richtig, dass die Initialisierungsliste (also, wenn man über den :-Operator initialisiert) die Daten schneller verarbeitet, als wenn es in dem Definitionsbereich in den geschw. Klammern getan wird? Grund dafür ist dass, wenn es nicht mit besagter Liste abläuft, der Compiler einen Standard-Konstruktor selbst generiert und die Member erst mal undefiniert sind, bis sie dann durch die Initialisierungen überschrieben werden?
Dann meine eigentliche Frage:
Wo schreibt man die Initialisierungsliste hin? In den Header, oder in die .cpp?Das ist kein Operator, sondern einfach nur ein :. Daten werden schneller verarbeitet ist auch komisch ausgedrückt. Mit der Initialisierungsliste initialisierst du halt deine Member, also der Copy-Ctor wird verwendet. Ohne Initialisierungsliste initialisierst du deine Member halt nicht, also der Default-Ctor + operator= wird verwendet. Du sparst dir mittels Initialisierungsliste also einen Funktionsaufruf
.Die Initialisierungsliste gehört natürlich zur Definition eines Ctor, und eine Definition steht natürlich nie in einer Header.
@Mod: Die Forensuche scheint im Moment gar nicht mehr zu funktionieren?