Reihenfolge Elementinitialisierer?
-
Warum crasht das?
class Test { auto_ptr<int> b, a; public: Test() : a(new int(1)), b(new int(*a)) { ; } };Werden die Elemente tatsächlich in der Reihenfolge der Deklaration initialisiert?
Daran würde ich nie denken...Thanks!
-
enduser schrieb:
Werden die Elemente tatsächlich in der Reihenfolge der Deklaration initialisiert?
Ja.
-
Ist ja doof.
Thx
-
enduser schrieb:
Ist ja doof.
Nein. Effektiv. Man stelle sich den Overhead vor der betrieben werden müsste wenn der Compiler (bzw. das Programm) sich merken müsste in welcher Reihenfolge die eizelnen Member initialisiert wurden. Die müssten dann nämlich auch in der umgekehrten Reihenfolge wieder abgebaut werden. Man denke sich drei Konstruktoren mit drei verschiedenen Initialisierungreihenfolgen...
Da ists doch einfacher sich die Regel "Initialisierungsreihenfolge = Deklarationsreihenfolge" zu merken.
enduser schrieb:
Daran würde ich nie denken...
Das geht einem nach kurzer Zeit ins Blut über.
-
**zu langsam**
-
Doof und effektiv. Schreibe halt gerne schön strukturierten Code doch wenn ich nun zwangsweise bestimmte Member zuerst deklarieren muss... Naja halb so schlimm.
Thx und bye
-
enduser schrieb:
Doof und effektiv. Schreibe halt gerne schön strukturierten Code doch wenn ich nun zwangsweise bestimmte Member zuerst deklarieren muss... Naja halb so schlimm.
Thx und byeEs kommt sehr sehr sehr selten vor, dass einzelne member voneinander abhaengen aber dann nicht gemeinsam in eine eigene klasse gepackt werden.