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 :

Problème constructeur destructeur


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 130
    Par défaut Problème constructeur destructeur
    Bonjour

    Le programme ci dessous me renvoie le résultat suivant
    ++ construction : il y a maintenant = 1 objets (je rajoute a priori a)
    ++ construction : il y a maintenant = 2 objets ( a priori a;u)
    ++ construction : il y a maintenant = 3 objets ( a priori a;u;v)
    -- destruction : il reste maintenant 2 objets (je demande qui est détruit?)
    -- destruction : il reste maintenant 1 objets (je demande qui est détruit?)
    ++ construction : il y a maintenant = 2 objets ( b est rajouté)
    Je comprends le constructeur mais pas le destructeur
    d'où mes questions
    1 - A quel moment le destructeur est-il sollicité ?
    2 - Pourquoi les 3 objets créés ne sont-ils pas détruits ?
    3 - pourquoi le destructeur n'est-il pas sollicité à la fin du programme pour dire
    qu'il supprime les objets restants ?

    Je vous remercie par avance de la célérité et de la précision avec laquelle vous me répondrez

    Voici le programme
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
     
    class cpte_obj
    {   
        static int ctr;
        public :  
     
           cpte_obj ();
           ~cpte_obj();
     
    };
    int cpte_obj ::ctr =0;
    cpte_obj :: cpte_obj ()
     {      
            cout<< "++construction : il y a maintenant = " << ++ctr << " objets\n";
    }
    cpte_obj :: ~cpte_obj ()
    {
           cout<< "-- destruction : il reste maintenant " << --ctr << " objets\n";
     
    }
    main ()
     
    {  void fct ();
        cpte_obj a;
       fct();
       cpte_obj b;
       system("PAUSE");
        }
      void fct ()
       { cpte_obj u,v;}

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Le premier destructeur appelé est celui de u, puis celui de v (lorsque des objets sont créés sur la pile, ils sont detruits dans l'ordre inverse de la completion de leur constructeur).

    Ensuite b et a sont détruits - lorsque tu rencontre la fin du programme, c'est à dire le '}' de main(), après la fin de l'execution de Pause.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 130
    Par défaut Question subsidiaire ... Merci d'avance
    Lorsque le constructeur a té appelé 3 fois quel est l'évènement qui fait intervenir le destructeur ?
    ++ construction : il y a maintenant = 1 objets (je rajoute a priori a)
    ++ construction : il y a maintenant = 2 objets ( a priori a;u)
    ++ construction : il y a maintenant = 3 objets ( a priori a;u;v)
    -- destruction : il reste maintenant 2 objets (je demande qui est détruit?)

    Merci ..........

  4. #4
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Salut,
    Lorsque le constructeur a té appelé 3 fois quel est l'évènement qui fait intervenir le destructeur ?
    Les objets crées dans un blocs sont détruits à la sortie de celui-ci. Dans ton cas, les objets 'u' et 'v' sont locaux à 'fct()', il sont donc détruits à la sortie de celle-ci : donc appel ( automatique, il n'y a rien à faire ) du destructeur pour 'u' et 'v'
    'a' et 'b' sont eux détruits à la fin de 'main()' ( après system ("pause"); ) : tu n'as pas le temps de voir l'inscription à l'écran car le programme se ferme immédiatement après!
    ++ construction : il y a maintenant = 1 objets (je rajoute a priori a)
    ++ construction : il y a maintenant = 2 objets ( a priori a;u)
    ++ construction : il y a maintenant = 3 objets ( a priori a;u;v)
    -- destruction : il reste maintenant 2 objets (je demande qui est détruit?)
    -- destruction : il reste maintenant 1 objets (je demande qui est détruit?)
    ++ construction : il y a maintenant = 2 objets ( b est rajouté)
    Après ça, il y a donc :
    -- destruction : il reste maintenant 1 objets ( surement pour b )
    -- destruction : il reste maintenant 0 objets (surement pour a)
    mais tu n'as pas le temps de la voir à l'écran!!

  5. #5
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Si tu veux savoir quel objet est traité affecte lui une valeur et fais la afficher par le constructeur et le destructeur. Ça deviendra très clair:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
     
    class cpte_obj
    {   
    private:
        int valeur;
        static int ctr;
        public :  
     
           cpte_obj ( int );
           ~cpte_obj();
     
    };
    int cpte_obj ::ctr =0;
    cpte_obj :: cpte_obj ( int v )
     {      valeur = val;
            cout<< "++construction : valeur = " << valeur << ", il y a maintenant = " << ++ctr << " objets\n";
    }
    cpte_obj :: ~cpte_obj ()
    {
           cout<< "-- destruction : valeur = " << valeur << ", il reste maintenant " << --ctr << " objets\n";
     
    }
    main ()
     
    {  void fct ();
        cpte_obj a ( 1 );
       fct();
       cpte_obj b ( 2 );
       system("PAUSE");
        }
      void fct ()
       { cpte_obj u ( 3 ),v ( 4 );}
    Have fun....

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 130
    Par défaut
    Merci à tous
    Je savais que je trouverais de la compétence ...........

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/08/2007, 11h42
  2. Problème constructeur JDialog
    Par catwomanette dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 05/01/2007, 09h44
  3. problème constructeur + héritage
    Par BOLARD dans le forum C++
    Réponses: 10
    Dernier message: 13/04/2006, 08h11
  4. Constructeur & Destructeur en UML
    Par fredhali2000 dans le forum UML
    Réponses: 5
    Dernier message: 31/03/2006, 19h31
  5. [D7] constructeur / destructeur
    Par raoulmania dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2005, 18h00

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