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 :

Utilisation d'un objet sans initialisation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Par défaut Utilisation d'un objet sans initialisation
    Bonjour,

    Je souhaiterais créer une classe Toto et pouvoir l'utiliser de cette facon: Toto::moninstance(param).

    Je ne sais plus comment s'appele ce mode d'utilisation d'une classe.

    Quelqu'un pourrait-il me rafraichir la mémoire?

    D'avance merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu veux parler d'une méthode statique?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 871
    Par défaut
    Comme l'a dit Medinoc, c'est une methode static. Cependant il est relativement rare de s'en servir comme ca s'il n'y a pas un but particulier. Par-exemple, on pourrait tres bien tomber sur une classe gerant un personnage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Perso {
    public:
      static Wizard create_wizard();
      static Warrior create_warrior();
    }
    Apres rien ne t'empeche de creer une classe Wizard et une classe Warrior qui heriteront toutes les deux de Perso. Cependant, les methodes statiques me semblent assez peu adaptees a ce genre de cas. J'ai pour habitude de plutot m'en servir lorsque je ne veux qu'une seule instance d'un objet (on appelle ca un singleton au cas ou ce serait ce que tu cherches). Du coup son constructeur est private et le seul moyen de le creer est de passer par une methode statique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Object {
    public:
       static Object *get_instance() {
         static Object *o(0);
         if (!o) {
           o = new Object;
         }
         return o;
       }
     
    private:
       Object();
    }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Par défaut
    Cool merci c'est exactement ce que je cherchais.

  5. #5
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Alors attention à la version du singleton d'imperio, car elle crée une fuite de mémoire, la manière propre de créer un singleton est comme ceci :

    version avec référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Object {
    public:
       static Object & get_instance() {
         static Object instance;
         return instance;
       }
     
    private:
       Object();
    }
    version avec pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Object {
    public:
       static Object * get_instance() {
         static Object instance;
         return &instance;
       }
     
    private:
       Object();
    }
    Les deux versions sont équivalentes.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Par défaut
    Citation Envoyé par Danny-k Voir le message
    Alors attention à la version du singleton d'imperio, car elle crée une fuite de mémoire
    Avec un pointeur effectivement, ça va "fuiter" mais à la fermeture du programme la mémoire va être libérée.
    Sans pointeur, l'objet est détruit et la mémoire libérée mais cela se fait à la fin du programme ...
    Donc la "fuite de mémoire" on s'en fout un peu dans ce cas là, que l'on alloue dynamiquement ou pas la zone de mémoire est libérée à la fin.

    Par contre, si le destructeur doit faire autre chose que libérer des ressources, là ça devient important, et c'est là que la version "sans pointeur" est plus safe et adaptée.

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/07/2014, 13h55
  2. serialiser un objet sans utiliser de bibliothèque externe
    Par Jérémy Lefevre dans le forum Langage
    Réponses: 2
    Dernier message: 11/04/2014, 17h02
  3. Réponses: 6
    Dernier message: 18/11/2012, 15h01
  4. Réponses: 2
    Dernier message: 30/08/2011, 23h40
  5. Copier un objet sans utiliser Clone()
    Par celes dans le forum C#
    Réponses: 3
    Dernier message: 26/03/2009, 11h31

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