2 Stimmen

Verhindern der vorzeitigen Zerstörung eines Objekts

Hier ist der (relevante) Code für meine pro::surface Klasse:

/** Wraps up SDL_Surface* **/
class surface
{
    SDL_Surface* _surf;
public:
    /** Constructor.
     ** @param surf an SDL_Surface pointer.
     **/
    surface(SDL_Surface*);

    /** Overloaded = operator. **/
    void operator = (SDL_Surface*);

    /** calls SDL_FreeSurface(). **/
    void free();

    /** destructor. Also free()s the internal SDL_Surface. **/
    virtual ~surface();
}

Das Problem ist nun, dass in meinem main Funktion, zerstört sich das Objekt selbst (und ruft damit den Destruktor auf, der gefährlich free() s die SDL Video-Oberfläche!), bevor das eigentliche Rendering beginnt.

int main(int argc, char** argv)
{
    ...
    // declared here
    pro::surface screen = SDL_SetVideoMode(320,240,16,SDL_HWSURFACE|SDL_DOUBLEBUF);

    // event-handling done here, but the Video Surface is already freed!
    while(!done) { ... }  // note that "screen" is not used in this loop.

    // hence, runtime error here. SDL_Quit() tries to free() the Video Surface again.
    SDL_Quit();
    return 0;
}

Meine Frage ist also, ob es eine Möglichkeit gibt, die pro::surface Instanz davon abhalten, sich selbst zu zerstören, bevor das Programm endet? Die manuelle Speicherverwaltung funktioniert allerdings:

/* this works, since I control the destruction of the object */
pro::surface* screen = new pro::surface( SDL_SetVideoMode(..) ); 

/* it destroys itself only when **I** tell it to! Muhahaha! */
delete screen;

/* ^ but this solution uses pointer (ewww! I hate pointers) */

Aber gibt es nicht einen besseren Weg, ohne auf Zeiger zurückzugreifen? Vielleicht eine Möglichkeit, dem Stack mitzuteilen, dass er mein Objekt noch nicht löschen soll?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X