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

11

07.02.2015, 12:47

Man kann auch mit unique_ptr forward declarations nutzen. Incomplete types sind explizit erlaubt. Erst wenn der Destruktor von unique_ptr aufgerufen werden kann, muss der vollständige Typ bekannt sein.

Zitat von »C++ Std. 20.8.1 §5«

[...] The template parameter T of unique_ptr may be an incomplete type.


EDIT: Ninjas...
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

12

07.02.2015, 17:05


Außerdem solltest du dir vermutlich noch move ansehen.


Falsches move, das hier ist das richtige: http://en.cppreference.com/w/cpp/utility/move
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

13

07.02.2015, 20:08

Das hat man davon, wenn man zu hastig arbeitet :D Vielen Dank fürs richtig stellen.
Lieber dumm fragen, als dumm bleiben!

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

14

09.02.2015, 09:43

Ich baue gerade an einem Tetris Clone, der in einer Textconsole läuft und das werde ich heute Abend direkt mal alles einbauen. new und delete wollte ich auch vermeiden und hab stattdessen nur Referenzen verwendet.

Ja, unique_ptr sind klasse. Solltest du echt überall benutzen, wo es möglich ist, denn dann brauchst du dir um Speicherlöcher keine Gedanken mehr zu machen.

In modernem C++ kommt praktisch nie new oder delete vor. Um ein neues Objekt zu erzeugen benutzt man stattdessen in der Regel make_unique was im wesentlichen genau wie new funktioniert, dir aber direkt einen unique_ptr liefert.

Außerdem solltest du dir vermutlich noch move ansehen. [Hinweis von Nimelrian] Falsches move, das hier ist das richtige: move [/Hinweis von Nimelrian] Oder am besten nach irgendwelchen Artikeln suchen, die all das etwas ausführlicher erklären. Fragen zur Verwendung kannst du aber auch hier stellen (am besten mit Codebeispiel, wie du es probiert hast und mit Erläuterung, was nicht funktionierte).

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

15

09.02.2015, 12:23

Die Erfahrung lehrt, das man sich bei sowas wie "Shots" nur unnoetige Probleme mit Pointern einhandelt. Ich wuerde daher wie dot sagt sowas benutzen: std::vector<Shots> blubb; benutzen. Ja, auch das hat Nachteile, fuer die es aber elegante Loesungen gibt.

viti

Frischling

  • »viti« ist der Autor dieses Themas
  • Private Nachricht senden

16

09.02.2015, 16:45

Jo mal danke für den Hinweis auf den unique_ptr - ich les grad die c++ Einführung von Soustroup und hab gesehen, dass die da auch erklärt werden (ich find das Buch echt gut, das schlägt sich auch nicht mit unnötigen Arrays rum sondern benutzt gleich von Anfang an Vektoren).

Meine eigentliche Frage hätt ich mir mit etwas versuchen aber leider sparen können: Ich mach ein Delete innerhalb vom switch und lass mir nachher die Koordinaten vom Schuss anzeigen, und damit seh ich eigentlich schon selber, dass das nicht klappen kann ...

Werbeanzeige