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 :

Precision sur les destructeurs virtuels


Sujet :

C++

Vue hybride

Linu6 Precision sur les... 29/06/2008, 13h40
Davidbrcz Dans ton code, la classe Base... 29/06/2008, 14h01
Linu6 Tiens donc, c'est donc la... 29/06/2008, 14h16
Lucien63 Tout à fait ! 29/06/2008, 14h27
Linu6 Mais dans ce cas là alors,... 29/06/2008, 14h33
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut Precision sur les destructeurs virtuels
    Bonjour

    J'ai besoin d'une précision sur les destructeurs virtuels

    soit une classe de base abstraite telle que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Base
    {
    .........
    public:
    virtual ~Base()
    ....
    };
    et une deuxième classe dérivée normale telle que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Derive: public Base
    {
    ....
    public:
    ~Derive();
    ...
    };
    ensuite supposons qu'on veuille créer un Derive en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Base *b;
    b = new Derive(...);
    Est qu'il est normal que les objets (Base et Derive) crées de cette sorte ne soient pas détruit à la fin de l'exécution?

    .. parce que lors de l'exécution les messages affichés dans les constructeurs s'affiche sur l'écran, mais pas les messages contenus dans les destructeurs..

    voila.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Dans ton code, la classe Base n'est pas abstraite. Elle n'a pas de fonction(s) virtuelle(s) pure(s).

    Ensuite:
    Est qu'il est normal que les objets (Base et Derive) crées de cette sorte ne soient pas détruit à la fin de l'exécution?
    bah oui ! Avec new, tu dit au compilateur, "je vais gérer manuellement la mémoire", ce qui implique de détruire la variable avec delete.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut
    Tiens donc, c'est donc la fonction virtuelle pure qui rend la classe abstraite?

    Mais pourtant je croyais que le destructeur virtuel seul suffisait pour rendre une classe abstraite, dans la mesure où il interdit son instanciation... non?

  4. #4
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Tiens donc, c'est donc la fonction virtuelle pure qui rend la classe abstraite?
    Tout à fait !

  5. #5
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut
    Mais dans ce cas là alors, c'est quoi l'intérêt des destructeurs virtuel.. si ce n'est pas rendre une classe abstraite?

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Si ta classe de base doit servir en tant qu'abstraction, le destructeur virtuel est utile car il va permettre d'appeler le bon destructeur lors du delete.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2006, 15h07
  2. Precision sur les transformations
    Par jcloupgarou dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 12/07/2006, 09h02
  3. Précision sur les ListBox
    Par SebRs dans le forum Windows
    Réponses: 5
    Dernier message: 04/05/2006, 16h38
  4. precision sur les fichiers
    Par ghostdog dans le forum C
    Réponses: 3
    Dernier message: 20/12/2005, 11h23
  5. [VBA-E]Demande de précision sur les menus
    Par geffdenimes dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2003, 10h46

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