Copie d'un objet avec un attribut de type vector
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 :
Code:
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;
}; |
mon fichier A.cpp :
Code:
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;
} |
Voilà ce que j'obtiens en sortie :
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é.