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 :

quand doit - on appeler un destructeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut quand doit - on appeler un destructeur
    Bonjour,
    ma classe point a pour constructeur point ( float, float )
    quand est ce que je dois utiliser un destructeur ~point( ) ? j'ai essayé de chercher un peu mais pas de résultat satisfaisant.
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Si t'a des ressources à libérer. (allocation dynamique etc).

    Enfin faut clarifier. Tu parles de le définir ou de l'appeller explicitement?

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Quand est ce que je dois le définir ?
    -> Est ce que à chaque fois qu'on définit un constructeur, il faut systematiquement définir un destructeur par la suite ?
    ->Si oui, quand est ce qu'on l'appelle explicitement ?

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par ikuzar Voir le message
    Quand est ce que je dois le définir ?
    -> Est ce que à chaque fois qu'on définit un constructeur, il faut systematiquement définir un destructeur par la suite ?
    Non.
    Par défaut, le langage en génère un pour toi qui fait peut-être ce qui est nécessaire. Si tel est le cas, autant laisser faire le langage.

    Si ta classe gère manuellement et directement des ressources (des new, des fonctions systèmes pour créer des sémaphores, des locks...), il sera nécessaire d'avoir un destructeur pour libérer les ressources allouées. Il sera aussi souvent nécessaire de bien réfléchir à ce qui va se passer pour ces ressources lors d'une copie d'une instance (ou empêcher cette copie).

    Avoir besoin de trop définir de destructeurs dans son code est généralement un signe qu'on utilise directement trop de fonctions bas niveau, qui demande de gérer directement des ressources, alors qu'en règle générale, en C++, on encapsule ces ressources dans des classes pour en faciliter la gestion.

    Citation Envoyé par ikuzar Voir le message
    ->Si oui, quand est ce qu'on l'appelle explicitement ?
    Jamais. Ou presque.

    Le destructeur est appelé automatiquement par le langage quand une variable sur la pile est détruite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
      X x(...);
      // On travaille avec x
    } // x est détruit. Le destructeur est appelé automatiquement.
    Pour une langage pas sur la pile (on l'a crée avec new), le destructeur est appelé par le langage lorsqu'on fait delete sur la variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
      X *x = new X(...);
      // On travaille avec x
      delete x; // on détruit x. Le destructeur est appelé.
    }
    Seul cas (mais absolument pas orienté débutant, et assez rare) : Quand on a utilisé un placement new, il faut généralement appeler explicitement le destructeur.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    splash68
    Invité(e)
    Par défaut
    Le detructeur est appellé le plus souvent implicitement

Discussions similaires

  1. Londres quand tu nous appelles
    Par menuge dans le forum Emploi
    Réponses: 79
    Dernier message: 23/05/2009, 14h13
  2. Réponses: 3
    Dernier message: 31/07/2007, 21h18
  3. [FT] quand doit-on creer une entrée?
    Par lichman dans le forum Administration système
    Réponses: 0
    Dernier message: 26/07/2007, 15h40
  4. [Loufoque] Appel de destructeur
    Par Chii-san dans le forum C++
    Réponses: 12
    Dernier message: 18/05/2006, 10h16

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