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 :

Ordre de construction des membres de classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut Ordre de construction des membres de classe
    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
    class A;
    class B;
    class C;
    ...
    class O;
    ...
    class M: public class O
    {
    A a;
    B b;
    C c;
    ...
    M(): c(), a() {}
    ...
    };
    Dans quel ordre seront créés les membres a, b, c et ceux de la classe de base O ?
    Je dirais dans cet ordre: O(), c(), a(). Mais où placer b() ?

  2. #2
    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
    O, A, B, C.

    L'ordre de création dépend de l'ordre de déclaration, pas de l'ordre d'apparition dans la liste d'initialisation du constructeur.

    Pourquoi ? car le destructeur doit détruire dans l'ordre inverse de création, et qu'il peut y avoir plusieurs constructeurs avec des liste d'init dans des ordres différents, alors qu'il n'y a qu'un seul ordre de déclaration.
    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.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Merci.
    Ainsi ce genre de code aurait un comportement indéfini ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M(): c(), a(c.do_something()) {}
    "a" a besoin de "c" pour être construit. Cependant, pour des raison d'alignement et/ou d'optimisation de mémoire, on pourrait préférer placer a avant c dans la déclaration des membres.

  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
    Tout à fait.
    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
    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
    Le compilo te crie dessus (warning) si il est correctement réglé, pour te dire : x will be initialized before xx when initialized here.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    J'avais regardé un peu trop vite...

    'scusez.

    Notez que j'y découvre un truc que j'ignore totalement: c'est quoi l'héritage virtuel ? (vais regarder dans la faq d'abord. EDIT: ok, j'ai vu)

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

Discussions similaires

  1. Liste des membres de classes sur MSDN.
    Par Baygon_Rouge dans le forum Débuter
    Réponses: 2
    Dernier message: 08/07/2008, 13h43
  2. Réponses: 8
    Dernier message: 17/04/2007, 11h35
  3. [weblogic 6][ejb]Ordre de chargement des classes
    Par Tistou07 dans le forum Weblogic
    Réponses: 1
    Dernier message: 14/02/2007, 10h14
  4. Parcours des membres d'une classe
    Par Isildur dans le forum WinDev
    Réponses: 5
    Dernier message: 13/10/2006, 09h13
  5. Réponses: 5
    Dernier message: 10/11/2004, 19h44

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