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 :

Petite question sur les conteneurs de pointeurs dans Qt


Sujet :

Qt

  1. #1
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut Petite question sur les conteneurs de pointeurs dans Qt
    Bonjour,
    J'utilise actuellement un QVector< T* > pour stocker des pointeurs, j'essaie de trouver une alternative qui prenne possession du pointeur. C'est à dire qui supprime l'objet pointé si celui-ci est supprimé ou écrasé, ou alors si le conteneur lui-même est carrément vidé ou supprimé.

    En fait, l'idéal serait un équivalent de boost ptr container, mais je n'arrive pas à trouver d'équivalent dans la version actuelle, il semblerait qu'une classe QPtrList existait mais a été supprimée en version 4.

    La doc recommande d'utiliser QList<T> à la place, cependant il ne semble pas que cette classe soit capable d'insérer quoi que ce soit sans faire une copie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QList<T>[i] = x //une copie de X dont QList est propriétaire est créée sur le tas.
    Et si on l'utilise sous forme de QList<T*> les inconvénients sont les mêmes que pour un QVector<T*> du côté de la destruction des objets.

    Existe-t-il une solution pour ne pas se coltiner le gestion à mano, autre qu'encapsuler la classe? Comment vous feriez?
    Je précise que dans ce cas ce n'est pas idéal d'utiliser des shared_ptr autour de mes objets pour des raisons d'efficacité...

  2. #2
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    cependant il ne semble pas que cette classe soit capable d'insérer quoi que ce soit sans faire une copie.
    Voir le COW de Qt.

    http://qt.developpez.com/faq/?page=g...optimise-copie
    http://qt.developpez.com/doc/4.5/shared/

  3. #3
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Merci mais ça n'entre pas en ligne de compte ici.
    C'est l'objet QList est partagé, pas forcément ce que tu mets dedans....

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    Non y as rien à ma connaissance.
    Peut être avec une QList de qsharedpointer
    http://qt.developpez.com/doc/4.5/qsharedpointer/

    Aucune idée si c'est une bonne idée

  5. #5
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Citation Envoyé par yan Voir le message
    Salut.
    Non y as rien à ma connaissance.
    Peut être avec une QList de qsharedpointer
    http://qt.developpez.com/doc/4.5/qsharedpointer/

    Aucune idée si c'est une bonne idée
    Merci
    J'ai pensé à cela en effet, mais malheureusement l'impact sur les performances est trop violent, je reste pour l'instant sur des delete manuels.
    J'arrive pas à comprendre pourquoi toutes ces classes
    http://qt.developpez.com/doc/3.2/qptrcollection/

    ont été mises au placard, leur utilisation fait totalement du sens pourtant... C'est vraiment bizarre je trouve.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    http://qt.developpez.com/doc/4.5/por...d-classes-qptr

    Au pire tu peut faire ton smart ptr sans trop de difficulté, non?

  7. #7
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Est-ce que tes T dérivent de QObject ? Si oui, suffit que tu leur donnes à tous comme parent un objet de type :
    - soit une classe qui hériterait de QList<T> et de QObject à la fois ;
    - soit une classe qui hérite de QObject et qui a le même scope que ta liste.

  8. #8
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Merci Alp, mais excuse-moi, je n'arrive pas vraiment à comprendre, en quoi hériter de QObject changerait les choses?

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Alp Voir le message
    Est-ce que tes T dérivent de QObject ? Si oui, suffit que tu leur donnes à tous comme parent un objet de type :
    - soit une classe qui hériterait de QList<T> et de QObject à la fois ;
    - soit une classe qui hérite de QObject et qui a le même scope que ta liste.
    Oui mais ils ne seront détruit qu'avec le QObject parent.... DOnc si y as beaucoup d'ajout et de retrait, la mémoire va monter en flèche, comme une fuite mémoire...

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    @yan : Pourquoi ?

    @_skip : est-ce que les éléments de ta liste héritent de QObject ? Si oui, tu peux leur faire bénéficier du système parent/enfant de Qt, qui s'occupe donc de libérer la mémoire pour toi.

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Alp Voir le message
    @yan : Pourquoi ?
    pourquoi quoi?

  12. #12
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Pourquoi :
    Citation Envoyé par yan Voir le message
    DOnc si y as beaucoup d'ajout et de retrait, la mémoire va monter en flèche, comme une fuite mémoire...
    ?

  13. #13
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    @Alp
    Oui c'est bien vu!
    Mais il faut que je teste ce que ça coute de plus à mes objets question mémoire d'être des QObjects.

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    @Alp : par ce que temps que le parent n'est pas détruit tous ses enfants ne seront pas détruit.
    Ou alors faut que tu fasse comme au début, avec un delete lors du retrait.

  15. #15
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Citation Envoyé par yan Voir le message
    @Alp : par ce que temps que le parent n'est pas détruit tous ses enfants ne seront pas détruit.
    Ou alors faut que tu fasse comme au début, avec un delete lors du retrait.
    C'est pour ça que je dis que l'objet parent doit avoir le même scope que la liste.

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Alp Voir le message
    C'est pour ça que je dis que l'objet parent doit avoir le même scope que la liste.
    c'est pour cela que je dit
    DOnc si y as beaucoup d'ajout et de retrait, la mémoire va monter en flèche, comme une fuite mémoire...

    Tous dépend comment il veut utiliser la list.

Discussions similaires

  1. Petite question sur les extensions dans un XSD
    Par LaBastoss dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 27/09/2011, 13h32
  2. petite question sur les pointeurs
    Par Krisprolls31 dans le forum C
    Réponses: 4
    Dernier message: 20/08/2010, 22h19
  3. Petite question sur les tabulations dans un jList
    Par Dambrath dans le forum Composants
    Réponses: 3
    Dernier message: 30/03/2009, 21h39
  4. Réponses: 5
    Dernier message: 16/06/2008, 22h00
  5. une petite question sur les pointeurs
    Par guy777 dans le forum C
    Réponses: 4
    Dernier message: 06/10/2006, 17h44

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