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

Superwayne

Treue Seele

  • »Superwayne« ist der Autor dieses Themas

Beiträge: 242

Beruf: Student & App Entwickler (Xamarin)

  • Private Nachricht senden

1

20.07.2015, 22:39

[C++] Verwendung von Pointern

Hallo,

Ich habe mich in letzter Zeit mit OpenGL ES in C++ befasst und jetzt wollte ich das ganze mal anwenden und ein einfaches kleines Spiel(eigentlich eher eine Simulation) damit entwickeln.
Dabei habe ich recht schnell gemerkt, dass ich nicht (mehr) weiß, wann ich überhaupt einen Pointer verwenden sollte, da ich im Studium fast nur Java und im Beruf nur C# verwende.

Das Beispiel:
Ich habe eine Klasse Game die den Spielezustand kapselt. In dieser Klasse verwalte ich u.a. ein Spielbrett und sehr viele kleine Zellen, die sich umherbewegen.
Das Spielbrett bleibt über das gesamte Spiel das gleiche Objekt (zumindest vorerst).
Zu den Zellen sollen jede Sekunde einige hinzukommen und andere verschwinden.

Nun stellt sich mir die Frage, wann ich (und ob überhaupt) mit einem Pointer arbeiten sollte und wann ich die Objekte direkt auf dem Stack anlege oder z.B. vector oder unique pointer verwende.
Wird der Stack irgendwann zu voll, wenn ich weitere Objekte wie Spieler auf dem Stack anlege?
Mir ist dabei besonders die Perfomance wichtig, da das Spielbrett und damit die Anzahl der Zellen so groß wie möglich sein soll.
Im Studium haben wir unsere eigene Speicherverwaltung geschrieben, aber wann ist das sinnvoll?
Auch will ich mir für spätere Arbeit mit C++ einen guten Stil anordnen und nicht einfach "irgendwie" programmieren.

Hier mal die bisherige Game.h inklusive den Möglichkeiten, die ich bisher sehe:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include "Board.h"
#include "Cell.h"
#include <vector>
#include <memory>
class Game
{
public:
    Game();
    ~Game();
private:
    std::unique_ptr<Board> board;
    // oder
    Board* board;
    // oder
    Board board;
    
    std::vector<Cell> cells;
    // oder
    Cell* cells;
    int cellCount;
};

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

20.07.2015, 23:43

Wenn möglich dann einfach als direkter Member oder lokale Variable; dynamische Speicherallokation nur wenn sie wirklich gebraucht wird (z.B. weil die Anzahl der Objekte erst zur Laufzeit bekannt ist). Wenn dynamischer Speicher gebraucht wird, dann unique_ptr beim Besitzer des Objektes (der, an dessen Lebensdauer die Lebensdauer des dynamischen Objektes gekoppelt ist) und Referenzen/Pointer um das Objekt zur Verwendung herumzureichen.

Für dein Beispiel oben also:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>

#include "Board.h"
#include "Cell.h"


class Game
{
private:
    Board board;
    
    std::vector<Cell> cells;
};

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (20.07.2015, 23:49)


Superwayne

Treue Seele

  • »Superwayne« ist der Autor dieses Themas

Beiträge: 242

Beruf: Student & App Entwickler (Xamarin)

  • Private Nachricht senden

3

21.07.2015, 10:39

Vielen Dank, dann will ich mich mal dransetzen ;)

Werbeanzeige