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 de cycle de vie d'un objet


Sujet :

C++

  1. #21
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par jmv Voir le message
    salut,
    je vois dans tous les réponses le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class A
    {
        static bool initialized = false;
    };
    Je croyais qu'il fallait écrire dans le fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class A
    {
        static bool initialized;
    };
    et dans le fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool A::initialized = false;
    <edit> houps... j'ai lu trop vite, c'était une variable static locale à une méthode. Mais essaye quand-même ma solution.</edit>
    Comme tu l'as corrigé, ça ne change rien, l'une est variable locale, l'autre est variable de la classe, ça revient au même, sauf que la portée est pour toute la classe dans ton cas.

    Citation Envoyé par jmv Voir le message
    Non ça n'améliorera rien, le code suivant :
    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
    class A
    {
        static int n1;
     public:
        A()
        {
            static int n2=0;
            cout << "n1 = " << n1 << endl;
            cout << "n2 = " << n2 << endl;
            n1 = n2 = 1;
        }
    };
    int A::n1 = 0;
     
    int main(int argc, char *argv[])
    {
        {
            A a, b;
        }
        A* p = new A;
        delete p;
        p = new A;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    donne sur la sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    n1 = 0
    n2 = 0
    n1 = 1
    n2 = 1
    n1 = 1
    n2 = 1
    n1 = 1
    n2 = 1
    Appuyez sur une touche pour continuer...
    désolé.
    Et bien, la sortie est bonne !!!

    Ca donne 1 à partir de la 2e instance qui est le rrésultat normal vu que la variable n'est pas réinitialisée !!!

    Citation Envoyé par Matthieu Brucher Voir le message
    Une seule instance d'une classe ? Pourquoi tu ne fais pas un singleton ?
    Si tu relis le thread depuis le début, il y a une classe qui contient une classe comme donnée membre, et lors de l'appel de cette dernière, il veut qu'il y a qu'une fois un appel de fonction, d'où l'idée de la variable statique ...

  2. #22
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Trunks Voir le message
    Si tu relis le thread depuis le début, il y a une classe qui contient une classe comme donnée membre, et lors de l'appel de cette dernière, il veut qu'il y a qu'une fois un appel de fonction, d'où l'idée de la variable statique ...
    Et ? Le singleton fait la même chose, sauf que je trouve ça plus propre de n'instancier la classe qu'une seule fois plutôt que de la construire, la détruire puis la reconstruire d'une autre manière.

  3. #23
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Et ? Le singleton fait la même chose, sauf que je trouve ça plus propre de n'instancier la classe qu'une seule fois plutôt que de la construire, la détruire puis la reconstruire d'une autre manière.
    D'après ce que j'ai compris, il reprends un code, et ça a été fait ainsi, je ne sais pas s'il peut modifier ça.
    Après, je ne m'y connais pas assez en design pattern, donc je ne vais pas m'engager plus

  4. #24
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    ...bon, j'ai trouvé une autre solution temporaire qui me plais pas trop (c'est un peu bricolage mais ça marche!), je poste à tout hasard (en gros je fais un test sur fichier existe/existe pas):

    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
     
    classe A:{
    	FILE * pFile;
            File=fopen("../myfile.txt","r");
     
    	if (!pFile)	
    	{
    		string chemin;
    		cout << "Fic ? :" ;
    		cin>> chemin;
     
    		pFile=fopen("../myfile.txt","w+");
     
    		fclose (pFile);
    	}
    }
    ...au moins, il me prend plus la tête, en attendant une autre solution

  5. #25
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par ostralo Voir le message
    ...bon, j'ai trouvé une autre solution temporaire qui me plais pas trop (c'est un peu bricolage mais ça marche!), je poste à tout hasard (en gros je fais un test sur fichier existe/existe pas):

    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
     
    classe A:{
    	FILE * pFile;
            File=fopen("../myfile.txt","r");
     
    	if (!pFile)	
    	{
    		string chemin;
    		cout << "Fic ? :" ;
    		cin>> chemin;
     
    		pFile=fopen("../myfile.txt","w+");
     
    		fclose (pFile);
    	}
    }
    ...au moins, il me prend plus la tête, en attendant une autre solution
    C'est pas très propre, mais bon, c'est déjà une roue de secours...
    Je ne voit pas pourquoi la variable statique te pose problème, tous les tests (même le tien) ont montré que ça marchait ...

  6. #26
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et surtout, au deuxième démarrage de l'application, ça ne marchera plus.

  7. #27
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Et surtout, au deuxième démarrage de l'application, ça ne marchera plus.
    Exact, raison de plus ! A moins qu'il utilise le RAII, mais là c'est une autre histoire ...

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

Discussions similaires

  1. Problème avec le cycle de vie d'une application
    Par sebagot dans le forum Android
    Réponses: 2
    Dernier message: 29/11/2014, 23h57
  2. Problème avec cycle de vie d'une applet
    Par riadhhwajdii dans le forum Applets
    Réponses: 0
    Dernier message: 16/09/2014, 09h48
  3. Problème de cycle de vie.
    Par Invité dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/12/2007, 13h09
  4. Problème de gestion d'une collection d'objet
    Par poolky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/02/2006, 21h51
  5. [Cookies] durée de vie de l'objet
    Par ozzmax dans le forum Langage
    Réponses: 13
    Dernier message: 13/01/2006, 21h38

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