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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
class Shot { ... }; class Ship { private: ... vector<Shot*> Shots; ... } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
case SDLK_f: Shot* NewShot; NewShot = new Shot; NewShot->SetRenderer(_pRenderer); NewShot->SetPos(_x + 1.1*_w*sin(Rad(_alpha)), _y + 1.1*_w*cos(Rad(_alpha))); NewShot->SetVelocity(_vx, _vy); NewShot->Load("Textures\\Fire.png"); _Shots.push_back(NewShot); cout << "New Shot fired. There are " << _Shots.size() << " Shots in the vector." << endl; break; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
#include <memory> // ... std::vector<std::unqiue_ptr<Shot>> shots; // ... Shot* NewShot = new Shot; shots.emplace_back(NewShot) |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Jonathan_Klein« (07.02.2015, 20:08)
Ja, unique_ptr sind klasse. Solltest du echt überall benutzen, wo es möglich ist
In modernem C++ kommt praktisch nie new oder delete vor.
Zitat
Always use the standard smart pointers, and non-owning raw pointers. Never use owning raw pointers and delete, except in rare cases when implementing your own low-level data structure (and even then keep that well encapsulated inside a class boundary).
Das new gibt es weiterhin, nur das delete spart man sich. (Hab die selbe Aussage auch schonmal gemacht )
Zitat
Kurz: Wenn man weiß was man tut, sind raw pointer Implementierung-spezifisch durchaus sinnvoll wenn man auf die class boundary achtet.
Wieso nicht einfach direkt einen vector aus Shots machen, anstatt die Shots alle per new zu allokieren und einen vector aus Zeigern auf diese zu machen?
Zitat
Allerdings kann man keine netten Forward Declarations mehr machen, wenn man std::unique_ptr benutzt.
Werbeanzeige