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 :

Objet qui sait qui l'utilise ? possible ?


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Par défaut Objet qui sait qui l'utilise ? possible ?
    Bonjour,
    bon j'avoue le titre est un peu bizarre mais je fais face à un petit problème et je ne vois pas trop comment faire. Alors j'explique :j'ai un objet, appelé A.
    Jusque là ça va :-)

    Alors le truc c'est que cet objet est utilisé partout, et le problème c'est que beaucoup d'instance sont créées sans qu'elles soient forcément détruites. Du coup, j'ai pensé ajouter à cet objet une liste qui contiendrait des pointeurs de QObject des objets qui utilise mon instance de A (par pointeur bien sur). J'espère ne pas être trop confus lol.
    Ainsi, si cette liste est vide c'est que l'objet n'est utilisé par personne et donc il peut être détruit.

    Mais du coup, je ne vois pas trop comment remplir cette liste à part à chaque fois que quelqu'un utilise le contact, il lui indique qui il est, mais bon c'est pas super parce que ca fait pas de lignes à rajouter

    Donc la voilà où j'en suis, je ne vois pas trop comment faire

    Si vous avez quelques idées je suis preneur

    Merki d'avance

    P.S. : c++ et Qt 4.3.2


    @pluche

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Utilise plutôt un compteur de référence, qui, quand il est mis à zero détruit ton objet.
    Avec Qt, regarde qshareddatapointer
    http://qt.developpez.com/doc/latest/...r.html#details
    Ou alors si tu utilise boost, il fournie aussi des pointeur intelligent pour cela

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Par défaut
    Déjà merki pour ta réponse rapide, mais je ne vois pas trop comment je dois faire avec le compteur de référence, enfin je ne vois pas quand il doit être incrémenter/décrémenter. Je vois un peu, à chaque fois qu'un objet ayant une référence dessus en a/n'en a plus besoin. Mais c'est que ca fait pas mal de changement lol

    Alors pour les smart pointer, j'ai tout lu. Ce qui m'intéresse ce sont donc les explicit smartpointers. Seulement je voudrais être sur de leur fonctionnement :
    en gros, je cree une classe AData qui contient les données et ma classe A du coup utilise des getter et setter sur le sharedpointer. Ca ça va :-)
    Et donc en fait à chaque fois, qu'un objet va "créer" une référence sur mon objet A (par retour de fonction par exemple donc par l'opérateur =), le compteur va s'incrémenter. Oki mais comment on lui dit qu'une réference est enlevée ? il le comprend tout seul ou pas. J'arrive pas trop à voir ça

  4. #4
    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
    Ca marche tout seul, car c'est une classe avec un destructeur, un smart pointer. Et donc dès que l'instance est détruite, il décrémente le compteur de références.

    Et oui, ça fait pas mal de changements, mais c'est la seule solution que tu as.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Par défaut
    Juste j'insiste un peu désolé mais c'est pour bien comprendre
    quand tu dis :
    "Et donc dès que l'instance est détruite"

    tu parles bien de l'instance qui pointe sur l'objet on est d'accord ?

    et du coup ça ne marche que sur la destruction de l'instance, ou ça marche aussi sur la portée genre une variable dans un bloc va pointer sur mon objet A, et du coup à la fin du bloc la variable est détruite et donc la réfenrece aussi ?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Samildanach Voir le message
    et du coup ça ne marche que sur la destruction de l'instance, ou ça marche aussi sur la portée genre une variable dans un bloc va pointer sur mon objet A, et du coup à la fin du bloc la variable est détruite et donc la réfenrece aussi ?
    normalement oui

  7. #7
    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
    Citation Envoyé par Samildanach Voir le message
    Juste j'insiste un peu désolé mais c'est pour bien comprendre
    quand tu dis :
    "Et donc dès que l'instance est détruite"

    tu parles bien de l'instance qui pointe sur l'objet on est d'accord ?

    et du coup ça ne marche que sur la destruction de l'instance, ou ça marche aussi sur la portée genre une variable dans un bloc va pointer sur mon objet A, et du coup à la fin du bloc la variable est détruite et donc la réfenrece aussi ?
    Tu as plusieurs instances :
    - l'instance de l'objet que tu surveille, I1
    - l'instance de l'objet qui encapsule un pointeur intelligent I2
    - l'instance du pointeur intelligent encapsulant I1 qui se trouve dans I2, appelé I3.

    Naturellement, pour chaque instance I2, tu as un I3 différent, et tu peux aussi avoir une instance I3 sans une instance I2, comme je vais te l'expliquer.

    Tu as une instance I2 qui est détruite. Automatiquement, I3 associée est détruite et le compteur de référence est décrémenté. S'il arrive à 0, I1 est détruite.

    De manière plus générale, tu as une instance I3 dans une fonction parce que tu veux avoir une référence vers I1. Arrivé à la fin du bloc, automatiquement I3 est détruit, et donc le compteur de I1 est décrémenté et s'il est nul, I1 est détruite.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Si tu veut utiliser un smart pointeur de boost, je te conseil d'aller faire un tour sur le forum boost
    Sinon, qshareddatapointer peut être une solution( c'est ce qui est utilisé par la pluspart des class Qt pour faire de l'implicite shared
    http://qt.developpez.com/doc/latest/...licitly-shared

    Tout dépende de ton environnement

  9. #9
    Membre confirmé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Octobre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 54
    Par défaut
    Ouais je reste sur le shared pointer ça me semble pas mal, explicit sharedpointer même

    Oki je vais tester ça je vous remercie de votre précieuse aide

Discussions similaires

  1. gstreamer : qui sait l'utiliser ?
    Par mamelouk dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 03/09/2007, 16h49
  2. [Débutant] Objet ou Attribut qui disparait
    Par Clark dans le forum C++
    Réponses: 16
    Dernier message: 22/05/2006, 16h24
  3. Réponses: 19
    Dernier message: 26/12/2005, 01h04

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