Bonjour,
Je suis "débutant" en C++ et j'ai un problème :
Comment peut on copier un objet qui a un attribut de type "vector" ? Je m'explique :
J'ai essayé d'utiliser memcpy et j'ai écrit ce petit code de test :
Voici mon fichier A.hpp :
mon fichier A.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <iostream> #include <vector> using namespace std; class A { public : void printV(int i); void addV(int i){v.push_back(i);} void testAddV(); private : vector<int> v; };
Voilà ce que j'obtiens en sortie :
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 #include "A.hpp" void A::printV(int i) { cout << v[i] << endl; } void A::testAddV() { this->addV(1); A* a2 = new A(); memcpy(a2,this,sizeof(*this)); cout << "a2->v[0] = "; a2->printV(0); this->addV(2); cout << "a->v[0] = "; this->printV(0); cout << "a->v[1] = "; this->printV(1); cout << "a2->v[0] = "; a2->printV(0); } int main() { A* a = new A(); a->testAddV(); system("PAUSE"); return 0; }
a2->v[0] = 1
a->v[0] = 1
a->v[1] = 2
a2->v[0] = -17891602
Appuyez sur une touche pour continuer...
Cela veut dire dire que la commande "this->addV(2);" a bien fait son boulot en me rajoutant 2 à this->v mais elle m'a fait des changements bizarres sur mon a2->v[0] qui est devenu -17891602. Pourquoi ? et est-ce que memcpy(a2,this,sizeof(*this))" n'est pas supposée faire la copie de l'objet pointé par this dans un nouvel objet qui sera pointé par a2 ? quelle serait la solution ?
Remarque : quand j'ai essayé avec un attribut plus simple (int par exemple) ça a bien marché : c'est à dire que la modification de l'attribut de l'objet d'origine n'avait aucune répercussion sur l'objet copié.
Partager