Bonjour, quelqu'un pourrait m'expliquer les constructeurs de copies, je sais vous allez me dire d'aller voir un tuto ou de lire un bouquain, je l'ai déjà fait cela et je n'arrive pas bien à comprendre, merci pour votre aide.
Michael
Bonjour, quelqu'un pourrait m'expliquer les constructeurs de copies, je sais vous allez me dire d'aller voir un tuto ou de lire un bouquain, je l'ai déjà fait cela et je n'arrive pas bien à comprendre, merci pour votre aide.
Michael
Que n'arrives-tu pas à comprendre ?
Leur utilité ? Comment ils marchent ? À quel moment ils sont appelés ?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
En bref, le constructeur de copie d'une classe est appelé à tout moment que le programme nécessite de copier un objet, comme dans une affectation par exemple. Il faut l'implanter si tu veux controller la façon dont les objets sont copiés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 MaClasse objet1; MaClasse objet2; // ... objet1 = objet2; // appeler constructeur de copie
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je ne pense pas qu'on puisse faire mieux qu'un livre, sauf si tu nous aides en disant où tu bloques.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Merci pour toutes ces réponses, en fait je me demande quel interet de faire des constructeurs de copies, par hasard vous n'avez un petit tuto sur tous les types de constructeurs ( je débute en C++ ), merci bien.
Michael
L'intéret des constructeurs de copie est de permettre la copie de classes pour lesquelles une simple copie membre-à-membre serait un bug.
Typiquement, des classes contenant des pointeurs:
Avec cette classe, à priori aucun problème. Sauf que si l'on fait une bête copie membre-à-membre, les deux objets pointeront sur la même zone mémoire, donc il y aura deux delete[] sur la même zone mémoire, et BOUM!
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
16
17
18
19
20
21
22 class UneClasse { public: //Constructeur UneClasse(); //Destructeur ~UneClasse(); private: int *m_pData; }; UneClasse::UneClasse() { m_pData = new int[16]; m_pData[0] = 42; //etc. } UneClasse::~UneClasse() { delete[] m_pData; }
Alors, on corrige:
Ainsi, chaque objet pointe sur sa propre zone de données.
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 class UneClasse { public: //Constructeur UneClasse(); //Constructeur de copie UneClasse(const UneClasse &); //Destructeur ~UneClasse(); private: int *m_pData; }; UneClasse::UneClasse() { m_pData = new int[16]; m_pData[0] = 42; //etc. } UneClasse::UneClasse(const UneClasse &src) { m_pData = new int[16]; for(size_t i=0 ; i<16 ; i++) m_pData[i] = src.m_pData[i]; } UneClasse::~UneClasse() { delete[] m_pData; }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager