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 :

Partager un pointeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 69
    Par défaut Partager un pointeur
    Bonsoir,

    Quel est le meilleur moyen (ou disons le plus simple pour moi ) pour partager un pointeur entre différentes classes et différentes librairies qui se link entre elles ?

    Pour l'instant ce que j'ai fait c'est qu'au début de mon programme, je crée mon pointeur, appelons le toto.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class CMyProg
    {
      static GToto*        m_pToto;
     
      CClassA*            m_pClassA;
      CClassB*            m_pClassB;
    }
    ensuite je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CMyProg::CMyProg( )
    {
      m_pToto = new GToto();
    }
    Ensuite je le transmets à mes autres classes imbriquées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m_pClassA = new CClassA(m_pToto);
    m_pClassB = new CClassB(m_pToto);
    ça marche mais le problème c'est que je ne peux le transmettre qu'à mes classes imbriquées donc ça ne me convient pas complètement, j'aurais besoin qu'il soit connu partout et je ne vois pas comment faire ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Je ne sais pas si j'ai bien compris, mais peut-être tu pourrais regarder du côté du mot clé extern

    Si j'ai pas bien compris, désolé...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 69
    Par défaut
    Merci !

    J'avais déjà vu le mot clé "extern" mais j'avais jamais compris comment l'utiliser.

    Donc avec "extern" ça marche dans le sens où toutes les classes de mes librairies statiques peuvent utiliser mon pointeur
    (j'ai déclaré ce pointeur en "extern" dans un fichier d'en-tête que tout le monde lit).

    Par contre ce qui ne marche pas c'est que j'ai une dll qui n'arrive pas à utiliser le pointeur pourtant elle a aussi en include le fichier d'en-tête.

    Peut-être que ce système ne marche pas dans ce cas des dll avec un LoadLibrary ou bien qu'il faut faire autre chose ?

  4. #4
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Salut,

    à confirmer (vu que tu sembles finalement vouloir partager une instanciation dynamique et non pas un pointeur) mais j'ai l"impression que tu te trouves exactement en situation de pouvoir utiliser un singleton :
    http://come-david.developpez.com/tut...page=Singleton
    Ce n'est pas très compliqué à mettre en place et ça te permettra de t'assurer de n'instancier qu'une seule fois m_pToto sans te prendre le chou à l'utilisation.

    Si ton but est réellement de partager un pointeur, alors mieux vaut peut-être t'orienter vers l'utilisation de pointeurs intelligents :
    http://loic-joly.developpez.com/tuto...mart-pointers/
    http://cpp.developpez.com/faq/cpp/?p...S_intelligents
    http://cpp.developpez.com/faq/cpp/?p...NTEURS_autoptr
    A noter qu'avec la nouvelle norme, on ne devrait plus utiliser que unique_ptr, les autres étant dépréciés me semble-t-il (à confirmer également).

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    A noter qu'avec la nouvelle norme, on ne devrait plus utiliser que unique_ptr, les autres étant dépréciés me semble-t-il (à confirmer également).
    Seulement std::auto_ptr. std::shared_ptr reste toujours disponible et heureusement : std::unique_ptr, comme son nom l'indique plus ou moins, ne permet pas de partager la responsabilité d'un pointeur. Après tu peux toujours faire p.get() pour avoir un pointeur nu que tu peux utiliser partout ailleurs.

    Maintenant je vais prendre les devants sur Koala, le tueur de singleton : il faut toujours réfléchir à deux fois avant d'utiliser un tel système.
    je ne peux le transmettre qu'à mes classes imbriquées donc ça ne me convient pas complètement, j'aurais besoin qu'il soit connu partout et je ne vois pas comment faire ?
    Tu est parti sur une bonne piste en passant m_pToto comme argument des constructeurs de CClassA et CClassB. Pourquoi ne peux-tu pas en faire autant "partout" ? Autre question : pourquoi m_pToto est-il statique ?

Discussions similaires

  1. pointeur et memoire partagée
    Par troumar dans le forum C
    Réponses: 21
    Dernier message: 15/09/2012, 12h37
  2. memoire partagée : pointeur
    Par samplaid dans le forum C
    Réponses: 5
    Dernier message: 23/11/2007, 19h36
  3. pointeurs dans une memoire partagée
    Par iznogoud36 dans le forum C
    Réponses: 15
    Dernier message: 13/06/2007, 17h05
  4. [Pointeurs] partager un pointeur
    Par L. Sierra dans le forum C++
    Réponses: 9
    Dernier message: 30/11/2006, 18h16
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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