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 : 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;
};
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
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é.