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

SL & STL C++ Discussion :

bien utiliser les conteneurs.. pointeurs, objets directement ?


Sujet :

SL & STL C++

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut bien utiliser les conteneurs.. pointeurs, objets directement ?
    Bonjour,

    J'aimerais avoir vos avis, vos conseils concernant les bonnes habitudes à adopter pour la programmation en C++...

    Voila la situation, dans une classe, j'ai une liste (un vector) d'objets, pour ne pas mettre les objets eux même dans le vecteur ce qui serait plus lourd, je mets les pointeurs...

    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
     
    class monobjet
    {
    private:
      vector<monobjet2*> mesobjets;
     
    public:
    // La si je ne me trompe pas, un nouvel objet vector est créé, rempli et renvoyé ?
    vector<monobjet2*> getMesobjets(void) const;
    // Référence ? accès direct à mon objet vector de ma classe ?
    vector<monobjet2*>& getMesobjets(void) const;
     
    // Dangereux de mettre un setter si on perd l'autre vector du coup... ?
    void setMesobjets(monbobjet2*);
    }
    Après, quelles méthodes pensez-vous qu'il soit judicieux d'avoir dans cette classe sans craindre à l'intégrité du vector, des fuites de mémoires, etc...

    Un setter et getter qui renvoie mon attribut vector, en référence ?
    un accès direct au objets du vector ?

    Enfin bref, comment vous codez vous d'habitude dès que vous avec comme ca des conteneurs, vous faites bien des conteneurs de pointeurs et non directement d'objets ?
    Mais après, quels accès faites vous ?

    Merci
    ++

  2. #2
    Membre averti

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Points : 350
    Points
    350
    Par défaut
    Bonjour,

    Eh bien non, justement. Pour éviter les problèmes de fuite de mémoire, ou d'utilisation de pointeurs sur des objets qui ont été supprimés, je mets directement les objets dans le conteneur.

    Je ne sois pas bien sûr que ta justification "ce qui serait plus lourd" soit vraiment pertinente ...

    Didier

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Effectivement, en général, j'utilise les conteneurs directement avec l'objet et non un pointeur sur l'objet. Ensuite, les accesseurs si besoin retourne une référence (const au besoin).
    Si d'aventure, une bibliothèque m'oblige à l'utilisation de pointeurs, alors je les encapsule dans des choses comme boost::shared_ptr, qui m'évite de me poser des questions (et de faire de bugs)!

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Citation Envoyé par italiasky Voir le message
    Mais après, quels accès faites vous ?
    Aucun.
    Le vecteur est un détail d'implémentation et seul 'monobjet' (qui devrait s'appeler 'maclasse' au passage) doit être au courant de son existence.

    MAT.

  5. #5
    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 860
    Points
    11 860
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Effectivement, en général, j'utilise les conteneurs directement avec l'objet et non un pointeur sur l'objet. Ensuite, les accesseurs si besoin retourne une référence (const au besoin).
    Si d'aventure, une bibliothèque m'oblige à l'utilisation de pointeurs, alors je les encapsule dans des choses comme boost::shared_ptr, qui m'évite de me poser des questions (et de faire de bugs)!
    Ou alors ptr_container, de Boost toujours.

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Ok merci

    Bonne journée

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

Discussions similaires

  1. Bien utiliser les GtkComboBox et GtkComboBoxEntry
    Par Franck.H dans le forum Contribuez
    Réponses: 0
    Dernier message: 21/11/2009, 14h24
  2. Comment bien utiliser les transactions
    Par babacan dans le forum Développement
    Réponses: 4
    Dernier message: 22/06/2009, 08h23
  3. [WPF] bien utiliser les "resources"
    Par cyberchand dans le forum C#
    Réponses: 5
    Dernier message: 19/02/2007, 09h25

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