Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

18.08.2008, 16:00

Zitat von »"Gandi"«

Die Variable ist doch global, das heißt das Objekt ist temporär für die gesamte Programmdauer.


Nein heißt es nicht. Zumindest nicht nach meinem Kenntnissstand. Temporäre Objekte die während der Auswertung des Ausdrucks der zur Initialisierung der globalen Variable diente erzeugt wurden, werden spätestens nachdem die Initialisierung abgeschlossen ist zerstört.

22

18.08.2008, 16:07

Mit Vektor(0,1.0f,0); erzeugst du im aktuellen Block ( { ... } ) ein temporaeres Objekt. Wird dieser Block verlassen, so wird Vektor vernichted. Die Variable const Vektor* AUFWAERTSACHSE ist zwar global, aber vom Typ Zeiger (auf Vektor). Nachdem der Block verlassen wurde und Vektor vernichtet wurde, zeigt AUFWAERTSACHSE immer noch auf die gleiche Stelle im Speicher. Dort befindet sich aber kein Vektor-Objekt mehr.

Anonymous

unregistriert

23

18.08.2008, 16:11

Kurz: Es ist unsinnig, nutzlos und sieht nicht man professionell aus.

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

24

18.08.2008, 16:15

Ok, aber:

const Vektor* AUFWAERTSACHSE = new Vektor(0,1.0f,0);

wäre richtig oder?

Nur so generelle Frage, auch wenns nicht viel Sinn macht^^

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

25

18.08.2008, 16:16

Zitat von »"Gandi"«

Ok, aber:

const Vektor* AUFWAERTSACHSE = new Vektor(0,1.0f,0);

wäre richtig oder?


Sofern du irgendwann mal noch delete machst ja.
Aber macht immer noch nicht viel Sinn. ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

26

18.08.2008, 16:19

Zitat von »"knivil"«

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.

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

27

18.08.2008, 16:21

Danke Jungs, wieder was gelernt, allerdings seh ich jetzt gar nichts mehr auf dem Bildschirm :roll:

Edit: Ok jetz war aus Testzwecken die Kamera falsch eingestellt, es scheint jetzt zu klappen. Ich versteh nur nicht ganz wieso bei der nicht vorhanden Aufwärtsachse überhaupt was zu sehen war^^

28

18.08.2008, 16:28

Bevor du irgendwas programmierst, arbeite doch mal ein C oder C++ Tutorial durch, z.B. hier: http://www.onlinetutorials.de/cpp-index.htm. Das erste ist glaube ganz gut. Der Link ist tot, aber der Download funktioniert noch. Auch wenn diese nur langweilige Konsolenanwendungen sind, durch die Grundlagen muss jeder.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

29

18.08.2008, 16:29

Zitat von »"Gandi"«

[...] Ich versteh nur nicht ganz wieso bei der nicht vorhanden Aufwärtsachse überhaupt was zu sehen war^^


Tja, undefiniertes Verhalten. Dein Zeiger hat halt auf irgendwelchen Datenmüll gezeigt. Beim nächsten mal wirf gleich den Debugger an und schau nach ob deine Vektoren beim Aufruf von D3DXMatrixLookAt*() auch alle die richtigen Werte haben...

Werbeanzeige