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 :

Class virtual ~Destructor


Sujet :

C++

  1. #1
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut Class virtual ~Destructor
    Bonjour,
    Je suis occupé de développer des class avec héritage,...
    Je me demandais donc comment fonctionne le systeme virtual, qu'est,...
    J'ai vu sur le travail d'un pote qu'il définissait un destructeur comme virtual mais je ne comprends pas vraiment quand utiliser cela?
    Merci d'avance

    Ajout:
    Sauf erreur de ma part le systeme virtual pour le destructeur est qu'une fois qu'il a executé le code de destruction il va voir si d'autres destructeur en amont ne devraient pas être executés?
    Comme un systeme de récusivité de destructeurs?

  2. #2
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Bonjour,

    Soit une classe A qui n'est pas final (elle peut avoir des classes dérivées).
    Soit une classe B qui dérive publiquement de A.
    Soit ptr un pointeur de type A* qui pointe vers un objet de type B.
    Que se passe-t-il si on fait delete ptr ?

    Si le destructeur de A n'est pas virtuel, alors cela appelle directement le destructeur de A sans appeler le destructeur de B, ce qui est une erreur.
    Si le destructeur de A est virtuel, alors cela appelle le destructeur de B, qui lui-même appelle le destructeur de A, ce qui est bien ce que l'on veut.
    Voir la FAQ C++ : Pourquoi et quand faut-il créer un destructeur virtuel ?

    Donc, en règle générale, si une classe a été pensée pour pouvoir être une classe de base, alors son destructeur doit être soit public et virtuel, soit protégé et non virtuel. Explication : si le destructeur est protégé, alors delete ptr provoquera une erreur de compilation s'il est écrit en dehors du code des méthodes de la classe A et de ses classes dérivées.

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

Discussions similaires

  1. protected virtual destructor
    Par Daïmanu dans le forum C++
    Réponses: 2
    Dernier message: 25/01/2015, 12h57
  2. Les Classes + virtual +override;
    Par helmis dans le forum Débuter
    Réponses: 3
    Dernier message: 04/05/2008, 20h16
  3. Procédure de classe virtual, override.
    Par cretindezalpes dans le forum Langage
    Réponses: 2
    Dernier message: 22/04/2008, 11h44
  4. Réponses: 9
    Dernier message: 02/04/2008, 10h05
  5. [C#] Evenement sur classe virtual
    Par papouAlain dans le forum Windows Forms
    Réponses: 26
    Dernier message: 11/01/2005, 11h45

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