Mit Vektor(0,1.0f,0); erzeugst du im aktuellen Block ( { ... } ) ein temporaeres Objekt. Wird dieser Block verlassen, so wird Vektor vernichted.
Temporäre Objekte werden nicht erst beim verlassen des Scope, sondern bereits früher, nämlich am Ende der Auswertung ganzen Ausdrucks in deren Zuge sie angelegt wurden, zerstört. Nach § 12.2 Absatz 4
ISO/IEC 14882:2003(E) (S. 191) gibt es da lediglich zwei Ausnahmen von denen die erste hier zutrifft.
Im konkreten Fall sollte das ganze imo so aussehen:
|
C-/C++-Quelltext
|
1
|
const Vektor* AUFWAERTSACHSE = &Vektor(0,1.0f,0);
|
1) Vektor(0,1.0f,0)
Ein temporäres Objekt vom Typ Vektor wird entsprechend des ctor Aufrufes hier erzeugt.
2) &Vektor(0,1.0f,0)
Ein temporäres Objekt vom Typ Vektor* wird erzeugt um das Ergebnis des gesamten Ausdruckes aufzunehmen und mit der Adresse des Temporaries initialisiert. Danach
kann der Temporary Vektor(0,1.0f,0) bereits zerstört werden. Lediglich der zweite Temporary, der das Ergebnis des Ausdrucks enthält, muss überleben.
3) const Vektor* AUFWAERTSACHSE = &Vektor(0,1.0f,0);
Anschließend wird der temporäre Pointer verwendet um AUFWAERTSACHSE zu initialisieren (man beachte, dass das eigentliche Vektor Objekt auf dass der Temporary zeigt bereits hier nicht mehr existieren muss!).
4)
Spätestens danach sind alle temporären Objekte zerstört worden.