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

1

31.07.2013, 17:15

Destruktor direkt nach dem Konstruktor aufgerufen

Hey,
habe ein Problem. Ich habe eine Klasse, die meine Direct3D11 Sachen verwaltet. Der Konstruktor brauch ein paar Parameter, wie z.B. den Fensterhandel. Diese erhalte ich aber erst während das Programm läuft. Nun habe ich ein Object von dieser Klasse global angelegt. Da wird der Standardkonstruktor aufgerufen. Wenn ich dann aber den eigentlichen Konstruktor aufrufe wird ein Temporäres Objekt erstellt, dass dann in mein globales Objekt kopiert wird. Weil das Objekt aber Temporär ist, wird es direkt gelöscht und der Destruktor wird aufgerufen.
http://pastebin.com/e30ihNGp (Ich benutze pastebin, weil der C++ Tag, hier im Forum, die Absätze und Zeileneinrückungen nicht richtig macht)

Was kann ich tun, damit Direct3d erhalten bleibt, bzw. dass ich Direct3d normal benutzen kann?

MfG
MazzMan
Hi

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

31.07.2013, 17:23

Move einführen oder Default-Constructor abschaffen und das Objekt auf dem Heap zum richtigen Zeitpunkt erzeugen.

Der explizite Aufruf des Destruktors am Ende ist übrigens recht unschön.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

31.07.2013, 17:23

Der explizite Aufruf des Destruktors am Ende ist übrigens recht unschön.
Warum?
Hi

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

31.07.2013, 17:26

Weil das implizit gemacht wird, wenn die Variable ihren Scope verlässt. Du rufst ihn unnötig zusätzlich auf, sodass er zweimal gerufen wird. Einmal durch Dich und einmal durch den Code des Compilers.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

01.08.2013, 14:41

Okay, das mit dem Move ist mir zu kompliziert^^ Ich habe stattdessen eine Methode erstellt, die mir die Membervariablen initialisiert.
Hi

6

01.08.2013, 19:56

Statt einem globalen Objekt kannst du einen globalen Zeiger erstellen, der erst 0 ist und später auf das richtige Objekt zeigt. Dann kannst du wenigstens nicht mit dem Objekt arbeiten, bevor es existiert. (Ich seh gerade, das BC das auch schon andeutete).

Du solltest natürlich statt eines Zeigers einen unique_ptr benutzen, damit das freigeben auch korrekt funktioniert.
Lieber dumm fragen, als dumm bleiben!

7

01.08.2013, 22:30

Aber so wie ich es gemacht habe gehts doch auch, oder? Mag vllt. etwas unschön sein, aber es funktioniert ohne Probleme, außerdem wird den Code außer mir eh keiner benutzen^^
Hi

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

8

02.08.2013, 04:05

Also wenn man darauf steht Code zu schreiben der Hautausschlag verursacht sicher.

Die Frage die du dir stellen solltest ist aber... Du bist ganz offensichtlich Faul ( Klingt böse soll es aber nicht, ich bin auch Faul ;) ). Wenn man Faul ist versucht man sich ja so wenig Arbeit wie möglich zu machen, nun... Deine Lösung mag jetzt noch funktionieren... aber sie ist schlampig. Schlampige Lösungen sind toll, sie gehen schnell und am Anfang funktioniert alles auch noch... irgendwie. Aber irgendwann ist der Anfang vorbei... dann ist man mitten drin oder sogar schon fast am Ende. Ja und dann bekommt deine Faulheit von der Schlampe..igen Lösung einen echt fiesen Tritt in die Familienplanung. Uns schwups erkennt man, dass Schlampigkeit ein Weg ist der zum Anfang führt. Und glaub mir, wenn man faul ist, mag man so etwas garnicht.

Möchtest du das?

Also meiner Erfahrung nach ist die fauleste Lösung beim Programmieren die Ordentliche.
:love: := Go;

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

02.08.2013, 06:51

Deinen letzten Satz kann man falsch verstehen. Du willst damit sagen, dass wenn sich wirklich Zeit sparen will, sollte man es ordentlich machen und dann wäre es so gesehen die faulste Lösung, weil sie auf lange Sicht Zeit spart.
Die faulste Lösung ist aus meiner Sicht aber leider die, die schnell gebaut ist, auch wenn sie auf lange Sicht viel mehr Ärger und Arbeit bedeutet. Diese Arbeit kommt ja aber erst später und das ist für Faulpelze meist gar nicht im Sichtbereich ;)

Lange Rede kurz: Finger weg von globalen Variablen, von Singletons und ähnlichem Unfug. Bau Software gut auf und am Ende arbeitet es sich damit am einfachsten.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige