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 :

Warning "has virtual functions but non-virtual destructor"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut Warning "has virtual functions but non-virtual destructor"
    J'obtiens des warnings bizarres , enfin dont je comprend pas le sens, et ce depuis peu de temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class A has virtual functions but non-virtual destructor
    class B has virtual functions but non-virtual destructor
    Un extrait résume du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class A
    {
         public:
               ....
               A();
               ~A();
               inline virtual void Fonction() { }
               ....
    }
     
    class B : public A
    {
          public:
              ....
              B();
              ~B();
              void Fonction();
              ....
    }
    Quelqu'un aurait il une idée sur l'origine de ces warnings??

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Définir des fonctions virtuelles sous-entend que tu vas utiliser le polymorphisme, donc que tu vas peut-être détruire des instances dérivées à partir de pointeurs sur la classe de base. Dans ce cas, la classe de base doit définir son destructeur virtuel, sans quoi celui des dérivées ne sera jamais appelé.

  3. #3
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Ce n'est pas un warning de GCC inspiré par EC++ de Scott Meyer ?
    Ce qui est dommage, c'est qu'il ne sait pas reconnaitre que les destructeurs protégés non virtuels sont une exception parfaitement valable.

    PS: "inline" est ignoré quand "virtual" est spécifié, car incompatibles.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    En effet, je bosse en utilisant GCC, et ce qui est bizarre c'est que je n'ai pas ces warning sous windows mais uniquement sous linux (Meme compilateur, sous CodeBlocks)

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Luc Hermitte
    PS: "inline" est ignoré quand "virtual" est spécifié, car incompatibles.
    Il y a des appels a des membres virtuels qui se font sur des objets ou le compilateur connait le type statique, inline sert alors. (Le cas le plus evident est bien sur l'appel au destructeur d'une classe de base a la fin du destructeur de la classe derivee.).

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Par défaut
    Gcc nous sort aussi un warning lorsque l'on cree une Interface (classe virtuelle pure) qui n'a evidement pas destructeur virtuel...

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

Discussions similaires

  1. Non-Virtual-Interface pattern et Python
    Par nikopol82 dans le forum Général Python
    Réponses: 9
    Dernier message: 19/02/2012, 18h25
  2. "Pure virtual function called" et destructeur virtuel
    Par Seb des Monts dans le forum C++
    Réponses: 9
    Dernier message: 10/09/2009, 16h54
  3. Réponses: 3
    Dernier message: 18/10/2006, 20h42
  4. [xsl][Java] functions xpath non interpretees
    Par Pi2 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 30/01/2006, 12h01
  5. performances des virtual functions
    Par xxiemeciel dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2005, 17h24

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