Du bist nicht angemeldet.

Werbeanzeige

1

24.03.2020, 19:04

C++ und SFML - Umgang mit Initialisierungslisten

Hallo. Ich bin über folgenden Codeausschnitt gestolpert:

Quellcode

1
2
3
4
5
Game::Game() : m_window("Chapter 2", sf::Vector2u(800,600)) {
    // Setting up class members
    m_tileTexture.loadFromFile("Tile.png");
    ...
}


m_window wird nach dem Doppelpunkt initialisiert - so weit so gut. Aber warum verwendet man dazu nicht einfach eine eigens geschriebene public Window:: Setup-Funktion?
Stattdessen lässt der Autor dieser Zeilen die Window:: Setup-Funktion private und nutzt die Initialisieurngsliste.
Ist das einfach guter Stil oder nur Geschmackssache? (P.s: m_window ist vom Typ Window - was selbst geschriebenes um Fenster zu behandeln)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »justmytwocents« (29.03.2020, 11:45)


2

25.03.2020, 08:40

Was sollte denn an einer Setup-Funktion besser sein?
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Jonathan

Community-Fossil

  • Private Nachricht senden

3

25.03.2020, 16:22

Die meisten werden RAII wohl für einen guten Stil halten. Sprich, es sollte alles in der Initialisierungsliste initialisiert werden und so Dinge wie Setup-Methode eigentlich überhaupt nicht geben.

Die Idee dahinter ist, halbfertige Objekte zu vermeiden. Sobald das Objekt existiert sollte es komplett initialisiert sein. Das vermeidet Fehler wie "oh, ich hätte erst noch die Init-Methode aufrufen müssen".

In diesem Sinne müsste also auch m_tileTexture einen Konstruktor haben, dem man den Dateinamen übergeben kann.

Wie bei allen Entwurfsmuster gilt, das man sie nicht stur immer anwenden sollte, sondern dann wann es sinnvoll ist. Aber gerade RAII wirst du mit wachsender Erfahrung fast immer nützlich/richtig finden.
Lieber dumm fragen, als dumm bleiben!

4

25.03.2020, 18:26

Danke für die Antworten. Mal sehen wie ich das in Zukunft verwende. :)

Werbeanzeige