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

Qt Discussion :

Les SmartPointers


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut Les SmartPointers
    Bonjour,

    Je suis en train de créer une application Qt dont une donnée doit être partagée par plusieurs classes.

    Afin d'éviter de me prendre la tete (en theorie) j'ai décider de dériver mon objet partagé avec un QSharedData et de recupérer un singleton sous la forme d'un QSharedDataPointer<maclasse>.

    Jusque la pas de souci.

    La ou ca se complique c'est quand je veux utiliser un fonction de mon objet partagé... Tout les acces partagés avec l'operateur -> sont soit constants (pas de modifications possibles) soit il me fait une copie de l'objet.

    Il n'y a pas un moyen de modifier mon objet tout en restant partagé ?

    Je préfère croire que j'ai mal lu la doc

    Quelqu'un a une idée ?

    Merci

  2. #2
    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
    Bizarre, d'après la doc, ça doit passer !
    Le singleton a un const quelque part ?

  3. #3
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Citation Envoyé par Miles
    Bizarre, d'après la doc, ça doit passer !
    Le singleton a un const quelque part ?
    Justement non. Et c'est ca le probleme. Ma classe contient des QMutex qui empechent ma classe d'utiliser l'operateur = par exemple (les mutex possedent des contructeurs par copie en privée).
    Du coup mon compilateur hurle en me disant que le smartpointer tente de faire une copie alors que les méthodes de copie sont privées.

    Je pourrais bien m'arranger pour que ma classe puisse utilisée des constructeurs par copie en surchargant 2 ou 3 fonctions mais cela ne résoudrais pas mon probleme qui est que si mon pointeur n'est pas constant, la methode -> de QSharedDataPointer appele la méthode detach() qui créer une copie de mon objet.

    Dans la doc, toute les méthode permettant d'acceder au pointer "non const" appelent la méthode detach()

    En attendant j'utilise un pointeur classique et j'aimerais éviter d'utiliser Boost juste pour ca :/

    Help !

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    ce n'est pas fait pour ca les shared data dans Qt.
    C'est fait pour eviter les recopies d'objets, tout en gardant l'independance des objets entre eux, si tu le modifie il se copie automatiquement. Comme ca tu peux par exemple passer une QString en parametre sans forcement la passer en ref & ou en pointer *
    Aussi quand on la retourne d'une fonction, elle ne se recopie pas tout le temps.

    Je ne comprend pas bien son utilisation dans ton cas qui est un singleton ?
    qu'est ce qui te gene dans un simple pointer ?
    il faudra aussi dans tous les cas gerer les acces concurrent ...

    Si c'est le pointer en lui-meme qui te gene, tu peux l'encapsuler dans un objet et tu ne verras plus le pointer.

    Explique juste un peu plus ?

  5. #5
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Ce qui me geine c'est que mon singleton sera utilisé par des modules (programmer par je ne sait pas qui) qui pourraient avoir la mauvaise idée de vouloir le delete. Cela rendrais donc mon programme instable a cause d'un module mal programmé.

    En utilisant un SmartPointer j'évitait toute destruction de pointeur de manière inoportune.

    Ceci dit c'est peut etre une mauvaise solution à mon problème.

  6. #6
    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
    Peut-être alors en regardant chez Boost ? Ca ne coûte rien de voir : http://miles.developpez.com/tutoriel...ost/smartptrs/

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

Discussions similaires

  1. Les meilleurs cours et tutoriels C++
    Par Community Management dans le forum C++
    Réponses: 1
    Dernier message: 13/05/2015, 13h50
  2. Obligatoire : lisez les règles du forum : MAJ 06/08/2010
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 03/07/2008, 13h46
  3. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  4. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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