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 :

static ou static Get() ?


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 23
    Points
    23
    Par défaut static ou static Get() ?
    Bonjour.
    Je débute en C++, et j'ai une question probablement bête sur l'utilisation la meilleure de static
    J'ai plusieurs classes que je n'instancie qu'une fois (config, historique, etc..), mais auxquelles j'accède depuis la plupart des sources.
    Quelle est la meilleur approche ?

    part1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    classe truc
    {
    }
    extern truc monTruc;
    part1.cpp
    ou bien....
    part1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    classe truc
    {
        public: 
            static truc* Get(); //obtenir un pointeur
    }
    part1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    truc* truc::Get()
    {
        static truc t;
        return &t;
    }
    et j'utilise alors truc::Get()-> dans mes sources...

    Cette deuxième construction est celle que j'utilise, mais j'ai du mal à en voir l'intérêt par rapport à une instance purement statique. Elle me semble alourdir l'écriture et peut être ralentir un micro-poil l'exécution.
    J'ai raté un épisode ?

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 619
    Points : 30 642
    Points
    30 642
    Par défaut
    Salut,
    Citation Envoyé par AlexG34 Voir le message
    J'ai raté un épisode ?
    Oui, t'as raté un épisode

    Dans le premier code que tu présente, tu oublies que les variables globales, c'est mal. Pour toute une série de raisons.

    Dans le deuxième, tu en arrives à la situation où la variable statique n'appartient pas à la classe, malgré les apparences, mais à la fonction get

    Entendons nous, rien n'empêche d'avoir une variable statique au sein d'une fonction, mais, dans ce cas, il ne faut surtout pas la renvoyer: elle doit rester "interne" à la fonction en question

    En outre, pourquoi la renvoyer sous la forme de pointeur pourquoi pas sous la forme de référence, si c'est d'un type plus complexe qu'un type primitif

    Enfin, la solution est ailleurs, agent scully

    Si la variable est constante, elle peut être déclarée directement dans l'accessibilité publique de la classe:
    Fichier.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MaClass
    {
        public:
            static const int maxValue;
    };
    Fichier.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const int MaClass::maxValue = std::numeric_limits<int>::max();
    Si la variable est non constante, elle sera déclarée plutôt dans l'accessibilité privée de la classe, avec mutateur et accesseur publiques:
    Fichier.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class MaClass
    {
        public:
            static Type /*const*/ & value() /*const*/{return mval;}
            static void define(const Type& t){mval = t;}
        private:
            static Type mval;
    };
    fichier.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type MaClass::mval=/*...*/ ;
    Enfin, si la classe est template, la valeur sera définie dans le fichier en-tête:
    TSingleton.hpp
    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
    template <class T>
    class TSingleton
    {
        public:
            static T& instance()
            {
                if(!inst)
                    inst = new T;
                return *inst;
            }
            static void destroy()
            {
                delete inst;
                inst = 0;
        }
        private:
            static T* inst;
    };
    template <class T>
    T* TSingleton<T>::inst = 0;
    Tu trouveras plein d'infos au sujet des variables / fonctions statiques sur la page de la FAQ qui leur est consacrée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Ok, merci. la réponse détaillée est dans le lien donné vers la FAQ.

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

Discussions similaires

  1. ArrayList static non static
    Par Team2009 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/05/2010, 22h23
  2. Static / non static Utilisation Java
    Par Bobble dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 04/11/2009, 16h59
  3. appel static/non static
    Par greg08 dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2008, 10h25
  4. Pb de fonction ( static / non static )
    Par Luffy49 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/05/2007, 13h28
  5. static / non-static ???
    Par benkunz dans le forum Langage
    Réponses: 4
    Dernier message: 05/04/2006, 09h49

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