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 :

Classes abstraites sans méthode virtuelle pure


Sujet :

C++

  1. #21
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Ce n'est pas feu le CUJ qui a été cité, mais Herb Sutter. On retrouve donc cette phrase dans le GOTW et dans son Coding Standards. L'auteur, la maison d'édition, et le titre du bouquin vont faire que cette "règle" risque de s'imposer.

    Sinon, je parlais bien d'un destructeur protégé (et non-virtuel). Le fait qu'il n'ait aucune fonction virtuelle dans sa classe mère non instanciable me fait dire que :
    - soit il part sur une classe agglomérat de données et autres fonctions qui sert de base à la définition d'autres classes (réutilisation de code) ; je ne vois pas de manipulation polymorphique des données
    - soit il part pour faire des dynamic_cast dans tous les sens ; là il faut bien le destructeur virtuel, mais le design sens le moisi.

    Il est vrai qu'il pourrait y avoir des cas intermédiaires, mais j'ai plus supposé que le design n'était pas moisi et de la première catégorie. Du coup, l'intérêt du destructeur public est vite faible. Mais bon.

    Dans tous les cas seule la présence d'une fonction membre virtuelle-pure garantit la non-instanciabilité.

    EDIT: grosse bétise dans le dernier paragraphe.

  2. #22
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Désolé pour le non respect dut au monsieur ...

    Je suis quand même demandeur de l'utilitée d'un destructeur non virtuel autre que vide et servant à émettre une erreur de compilation ...

    Au fait, dans l'exemple de l'article, si j'ai bien tout lu, il aurait été plus propre de mettre l'operateur delete en protégé plutôt que le destructeur ...

  3. #23
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Pas une question de respect. Juste une constatation : c'est un auteur influent. Et à l'exception de quelques trucs, ce qu'il écrit tend à faire force de loi -- comme avec les autres auteurs influents.


    Un des intérets des destructeurs protégés non virtuels, c'est aussi pour les classes qui n'ont pas une sémantique d'entité. On définit des services qui seront importés par des classes filles qui vivent sur la pile. La classe mère n'est pas instanciable sur la pile. Du coup, protéger le delete n'empêche pas grand chose.
    Mais il est vrai que l'on peut se contenter de mettre tous les constructeurs en protégé ou privé -- pour en revenir à la question de l'OP.

    La question du destructeur protégé non-virtuel dans une classe de base vient de la dichotomie :
    - soit on veut une destruction polymorphique -> public virtuel
    - soit on ne la veut pas (ex. typique: les politiques) -> protégé non-virtuel

  4. #24
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    , po tout compris je crois que ca ira mieux le jour ou je se serait confronté au pb.
    Pis c'est un sujet qui à fait coulé beaucoup d'encre les destructeurs non virtuels. On va pas partir dans un HS infini.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/10/2012, 19h25
  2. Classe abstraite et méthodes virtuelles
    Par Daikyo dans le forum Langage
    Réponses: 10
    Dernier message: 16/11/2010, 15h50
  3. Classe abstraire sans méthode abstraite
    Par 0redd dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 20/08/2010, 23h42
  4. Réponses: 15
    Dernier message: 05/07/2007, 01h29
  5. Réponses: 14
    Dernier message: 17/11/2006, 19h17

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