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 :

Constructeur de copie


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Par défaut Constructeur de copie
    Salut,
    voilà j'utilise une classe CLayer qui dérive de std::list<CLED*>, à savoir qu'à chaque ajout d'un élément CLED* dans ma liste, un nouveau CLED est instancié avec allocation dynamique de mémoire.
    J'ai eu besoin d'un constructeur de copie pour ma classe CLayer capable de réallouer les zones mémoire de chacun des CLED* de ma liste.
    Voici comment j'ai procédé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CLayer::CLayer(const CLayer &Source) {
      *this = Source;
      CLayer::iterator tmpIt;
      for (tmpIt=begin(); tmpIt!=end(); tmpIt++)
        *tmpIt=new CLED(**tmpIt);
    }
    Cette méthode fonctionne sans problème, mais je me posais tout de même une question : admettons que je souhaite faire de l'itération sur Source et boucler des this->push_back(...), à savoir que le compilateur n'autorise pas à faire (apparement parce que Source est const et tmpIt ne l'est pas...), comment aurais-je dû m'y prendre ?

    Merci de m'aider à satisfaire ma curiosité

    Rémy

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il suffit que tmpIt soit déclaré constant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CLayer::const_iterator tmpIt;
    A part ça, je ne vais pas pinailler sur le fait que tu dérives de std::list, mais c'est généralement une mauvaise idée, et mal fait aussi.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Par défaut
    Merci bien, je ne connaissais pas const_iterator
    Pour la classe qui dérive de std::list, on m'a déjà dit maintes fois que c'était une mauvaise idée...
    A vrai dire le seul argument que j'ai pour justifier cet héritage c'est d'avoir définitivement besoin de surcharger les opérateurs de la STL pour mes propres besoins, et puis j'ai déjà codé plusieurs milliers de lignes comme ça sans m'embrouiller les pinceaux c'est le principal

    Merci encore !!

    Rémy

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

Discussions similaires

  1. [résolu]les constructeurs de copie
    Par pouss dans le forum Langage
    Réponses: 9
    Dernier message: 28/06/2005, 10h57
  2. Réponses: 3
    Dernier message: 24/04/2005, 14h19
  3. [C++]Heritage et constructeur de copie
    Par matazz dans le forum C++
    Réponses: 2
    Dernier message: 25/03/2005, 12h31
  4. Constructeur de copie modifiant le paramètre ?
    Par Nicodemus dans le forum C++
    Réponses: 4
    Dernier message: 12/01/2005, 21h25
  5. Constructeur de copie et Template: Transtypage
    Par ikkyu_os dans le forum Langage
    Réponses: 9
    Dernier message: 26/12/2004, 22h29

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