est ici le code (pertinent) pour ma pro::surface
classe:Empêcher un objet de détruire prématurément
/** 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();
}
Maintenant, le problème est que dans ma fonction main
, l'objet lui-même détruit (et appelle donc le destructeur qui dangereusement free()
s la surface vidéo SDL!) avant le début du véritable rendu.
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;
}
Ma question est, est-il possible d'arrêter l'instance pro::surface
de se détruire avant la fin du programme? La gestion de la mémoire fonctionne manuellement:
/* 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) */
Mais n'y a-t-il pas un meilleur moyen, sans recourir aux pointeurs? Peut-être un moyen de dire à la pile de ne pas supprimer mon objet pour le moment?
Est-ce que 'pro :: surface'" est à vous "? Je ne connais pas SDL, est-il possible de tenir le 'SDL_Surface' dans un pointeur partagé au lieu d'un pointeur brut? Ou au moins quelque chose avec une sémantique de pointeur partagée? – Chad