IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème d'appel de destructeur


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Points : 41
    Points
    41
    Par défaut Problème d'appel de destructeur
    Bonjour,
    j'ai un gros problème, en fait j'ai deux classes Sprite et Bitmap
    quand je fais çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sprite sprite;
    ...
    delete &sprite;
    pas de problème,

    quand je fais çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Bitmap bitmap;
    ...
    delete &bitmap;
    le programme plante à l'appel du destructeur

    les destructeurs des deux classes sont vides, quelqu'un a une idée d'où cet étrange problème peut venir? Je met les constructeur au cas ou (j'utilise la bibliothèque sfml):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Bitmap::Bitmap()
    {
        image = new sf::Image(0, 0, OPACITY_COLOR);
        image->SetSmooth(false);
        rect   = Rect(0, 0, image->GetWidth(), image->GetHeight());
        n_texts = 0;
        font = sf::Font();
        if (!font.LoadFromFile(STANDARD_FONT))
            std::cerr << "police non chargée" << std::endl;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sprite::Sprite()
    {
        bitmap = new Bitmap(0, 0);
        viewport = sf::Rect<int>(0, 0, SCREEN_W, SCREEN_H);
        surface = sf::Sprite();
        surface.SetBlendMode(sf::Blend::Alpha);
        surface.SetImage(*bitmap->get_image());
        visible = false;
    };

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    delete ne doit être appellé que lorsque l'objet a été crée dynamiquement (avec new basiquement). Il s'agit donc d'un "coup de chance" si le premier appel n'a pas planté. Le destructeur dans le cas d'objet alloué "statiquement" est appellé automatiquement en fin de bloc.

    De plus, il est étrange que ton destructeur soit vide, étant donné que tu crée des données dynamiquement dans tes constructeurs. Tu devrai donc probablement les libérer dans le destructeur (sauf si ce sont des pointeurs intelligents ou assimilés)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Points : 41
    Points
    41
    Par défaut
    ah! ok!

    en fait j'ai mis des truc dans mon destructeur mais j'ai essayé en ne mettant rien pour voir si çà plantait aussi.

    En tout cas merci de ton aide, c'est résolu.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Si ton destructeur n'est pas trivial, tu devrais t'intéresser à cette entrée de la F.A.Q et celles qui suivent (coplien), en gros te poser la question du constructeur de copie et de l'opérateur d'affectation.
    Si tu fais des allocations dynamiques, tu devrais regarder du côté du RAII et des pointeurs intelligents.
    Enfin, pour les constructeurs, tu devrais t'intéresser aux listes d'initialisation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [onenter/submit] Problème d'appel de page
    Par Kylen dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/08/2005, 14h11
  2. Problème d'appel de module.
    Par TomPad dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 10h24
  3. Autre contexte mais tjs problème d'appel fct interne
    Par Neilos dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/08/2004, 13h51
  4. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30
  5. Réponses: 4
    Dernier message: 19/04/2004, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo