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.10.2011, 16:23

Kapitel 12: Fehler in der Quit-Funktion?

Hallo,

ich bin neu hier im Forum und wollte mal direkt ein Frage stellen zu den Code in Kapitel 12:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Quit
//
// Aufgabe: Sprites freigeben
//
void CPlayer::Quit ()
{
    // Spieler-Sprite freigeben
    if (m_pSpritePlayer != NULL)
    {
        delete (m_pSpritePlayer);
        m_pSpritePlayer = NULL;
    }

    // Schuss-Sprite freigeben
    if (m_pSpritePlayer != NULL)
    {
        delete (m_pSpritePlayer);
        m_pSpritePlayer = NULL;
    }

} // Quit


Im Buch wird in der Init-Funktion zwei Sprites erzeugt: m_pSpritePlayer und m_pSpriteShot. Beide werden im Konstruktor auf NULL gesetzt und in der Init-Funktion deren jeweiligen Bildern etc. zugeordnet. Was mich verwirrt ist die Quit-Funktion. Im ersten Teil wird, wie erwartet, den Spieler-Sprite freigegeben und auf NULL gesetzt. Der zweite Teil sollte eigentlich den Schuss-Sprite freigeben und auf NULL setzen, aber im Code (vom Buch und CD) wird wieder m_pSpritePlayer auf NULL gesetzt, was für mich unlogisch ist, das man das ja vorhin schon gemacht hat. Eine Fehlermeldung seiten Compiler gibt es hier natürlich nicht, aber ist das hier am Ende nicht ein Memory-Leak, da man den m_pSpriteShot nicht freigegeben hat? Bzw. ist das hier überhaupt ein Fehler oder verstehe ich hier was falsch =/?

Hoffe ihr könnt mir helfen... .

MFG

Bareus

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

2

31.10.2011, 16:54

Ja ist ein Fehler.

Überhaupt sollten diese ganzen Init-Methoden zu Konstruktoren und die Quit Methoden zu Destruktoren gemacht werden.