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 :

savoir la creation d'objets.


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut savoir la creation d'objets.
    salut a vous tous, j'ai une petite question qui me tracasse depuis pas mal de temps, est-ce qu'on peux savoir si un objet a été crée ou non, s'il existe déjà dans la mémoire et comment on peux le savoir ?
    s'il y a une idée comment le faire je suis preneur.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Tu veux un compteur d'instances ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class CMaClass
    {
    public:
    CMaClass() { m_nb_instance++; }
    ~CMaClass() { m_nb_instance--; }
     
    static int NbInstance() { return m_nb_instance; }
     
    private:
    static int m_nb_instance;
    };
    A chaque fois que ta classe est instanciée, le constructeur de la classe incrémente la variable membre statique m_nb_instance, à chaque fois qu'elle est détruite, le destructeur décrémente le compteur d'instances. La fonction statique NbInstance() te retourne le nombre d'instance à un instant donné.

    C'est l'idée de base
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    et si je veux tester pour que je sache s'il existe ou non ? c'est faisable ?

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Pourquoi tu veux savoir s'il existe?
    Si c'est pour être sur de manipuler une donnée valide, alors la réponse c'est : utilise des shared_ptr.
    Il implémente un compteur de référence comme ce montre ram-0000 ci dessus. Utilisé en combinaison avec weak_ptr, tu peux gérer presque n'importe quoi avec...

    A consommer sans modération.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Pourrais tu être un peu plus explicite dans ce que tu veux obtenir

    En effet, en toute logique, lorsque tu déclares une variable d'un type donné, cette variable est automatiquement créée en mémoire, et tu peux y accéder au départ de la variable que tu as déclaré.

    La variable est d'un autre coté automatiquement détruite (et la mémoire qui lui est dédiée libérée) lorsque tu quitte la portée dans laquelle la variable a été déclarée

    Dés lors, il n'y a normalement pas nécessité de s'interroger sur ce point

    En effet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main()
    {
        /* je déclare une variable de type Type, je SAIS
         * qu'un espace mémoire suffisant pour en contenir l'intégralité
         * est réservé à cette variable
         */
        Type mavar;
        /* Tant que je ne passerai pas par l'accolade fermante, je peux
         * accéder aux informations contenues par mavar
         */
    } /* mavar est détruite ici et la mémoire qui lui était dévolue est 
       * libérée
       */
    L'exception vient de l'utilisation de pointeurs, qu'il est préférable d'initialiser à NULL si, pour une raison ou une autre, nous souhaitons "postposer" l'allocation de la mémoire
    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
     
    int main()
    {
        /* Comme je décale l'allocation de la mémoire (et donc la création de la
         * variable), j'initialise le pointeur à NULL
         */
        Type* pointer=NULL;
        /* la variable pointée existera à partir du moment où j'aurai explicitement
         * demandé l'alloctation de la mémoire
         */
        pointer = new Type;
        /* et existera jusqu'à ce que je demande explicitement la libération
         * de la mémoire... Il ne faudra pas oublier, par sécurité, de remettre
         * le pointeur à NULL
         */
        /* entre temps, nous pouvons nous assurer que pointeur pointe sur une
         * variable (supposée) existante par un simple test proche de
         */
        if(pointer ) /* si tu préfère l'écriture longue ca donne if(pointer !=NULL) */
        {
            /* ce qui doit être fait avec pointer */
        }
        delete pointer;
        pointer = NULL
    }
    Autrement, il y a moyen de compter le nombre d'instances de la manière présentée par ram-0000 (tu peux à tout moment obtenir le nombre d'instances existantes en invoquant CMaClass::NbInstance() ), voire, veiller à n'autoriser qu'une et une seule instance d'une classe donnée en la transformant en singleton, ou... une foule d'autres possibilités...

    Mais, à défaut d'expliquer clairement ce que tu souhaites faire, il nous sera difficile de t'indiquer comment y arriver
    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

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

Discussions similaires

  1. Creation d'objet a partir d'un fichier - espace de nom -
    Par LLEJEUNE1 dans le forum Général Python
    Réponses: 2
    Dernier message: 05/04/2006, 12h13
  2. probleme de creation d'objet cristal report
    Par sam_12_3 dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 03/04/2006, 13h58
  3. creation d'objet de classe a partir de string
    Par mencaglia dans le forum C++
    Réponses: 1
    Dernier message: 14/03/2006, 09h56
  4. [debutant] Creation d'objet au fur et a mesure
    Par jamesleouf dans le forum Débuter
    Réponses: 8
    Dernier message: 14/03/2006, 00h06
  5. Lancer des shell unix pour creation d'objet ORACLE
    Par sygale dans le forum Administration
    Réponses: 6
    Dernier message: 27/10/2004, 18h03

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