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 :

Construction et destruction d'une variable globale objet


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Construction et destruction d'une variable globale objet
    Salut,

    J'ai une classe est définie avec un fichier .h et .cpp et j'aimerais que tout autre fichier qui inclu ce .h ait accès à une instance globale de cette classe nommée InstanceGlobale. Il me semble que c'est le fonctionnement de std::cout dans iostream.

    Donc voiçi brièvement le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // .h
     
    class MaClass
    { 
      MaClass();
      ~MaClass();
      ...
    };
     
    extern MaClass InstanceGlobale;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // .cpp
    MaClass InstanceGlobale;
     
    ...
    Ceci marche parfaitement, et je peux bien utiliser InstanceGlobale dans tous les fichiers incluant le .h. Cependant, un petit problème apparaît comme vous vous en doutez, le destructeur n'est pas appellé lors de la terminaison du programme. Hors ceci est génant parceque celui-ci effectue des opérations d'entrée sorties qui sont nécessaire au bon fonctionnement du programme.

    Ca me surprend un peu car il serait normal que le compilateur se charge de la destruction de l'objet puisqu'il se charge de sa construction.

    donc avez vous une idée de comment puis-je faire pour que le destructeur soit bien appelé lors de la sortie ?

    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Il est bien appelé. Tu as été induit en erreur par le fait que std::cout est détruit avant ton objet.
    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...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    bah zut alors =) c'est pile ce que je veux faire... un cout. Pour expliquer rapidement, le programme affiche des caracteres de control pour la couleur. Et donc pour éviter de perturber l'affichage qui suit la fin du programme, le destructeur affiche des caracteres pour nettoyer en quelque sorte.

    Y'a t-il une solution à ce problème ou dois-je changer "l'architecture" du programme ?

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Tu as printf, les fichiers ou un programme à revoir.
    Ou mieux, utiliser la fonction de nétoyage de console qui est dispo sur ton système (recharge dans les forums C&C++, c'est récurrent)
    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 à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Alors j'ai essayé le printf et cela ne marche pas non plus. J'ai vérifié si le constructeur est bien appelé en créant un fichier lors de son appel et vous avez bien raison. Mais le printf ne fonctionne pas comme si le descripteur stdout avait été fermé...

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Je ne sais plus si c'est "normal" ou pas. Jusqu'à présent, j'avais plutôt l'habitude que le printf fonctionnait. Cela doit dépendre des outils et OS à tous les coups.
    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...

Discussions similaires

  1. Portée d'une variable globale
    Par Giill dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/12/2005, 10h13
  2. [Sécurité] Activation d'une variable globale
    Par Ricou13 dans le forum Langage
    Réponses: 3
    Dernier message: 28/09/2005, 10h24
  3. [quai debutant] : creation d'une variable globale.
    Par bapman344 dans le forum Access
    Réponses: 4
    Dernier message: 23/06/2005, 11h33
  4. Comment déclarer une variable globale
    Par davkick dans le forum C
    Réponses: 13
    Dernier message: 20/05/2005, 18h50
  5. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2003, 19h11

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