Bonjour, j'ai une petite question a propos des vector,
j'ai lu http://artis.imag.fr/~Xavier.Decoret...urs_part2.html
que la methode clear appelait tous les destructeurs et désalouait la memoire.
ca a l'aire super chouette ca...
Alors j'ai fait un test, voici une classe Truc.
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
class Truc
{
public:
	long x;
 
	Truc()
	{	cout <<"constructeur par defaut Truc::Truc()"<<endl; 	}
 
	Truc(const Truc& o) 
	{ 	x=o.x;		cout<<"constructeur par copie"<<endl;	}
 
	Truc(long z)
	{	x=z; 	cout <<"constructeur Truc::Truc("<<z<<")"<<endl;	}
 
	~Truc()
	{	cout <<"destructeur Truc::~Truc()"<<endl;	}
 
};
et voici un test que je fais :
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
32
33
34
int main( int argc, char* args[] )
{
 
	Truc* a=NULL; // je crée un pointeur sur un truc...
	a= new Truc; // je crée le truc...
	delete a;// je le supprime maintenant
	a=new Truc(123); // creation d'un truc avec le constructeur
	delete a;
	cout<<"creation du vecteur"<<endl;
 
	std::vector<Truc*> vect; // je crée un vecteur
	vect.reserve(10); // la reservation de 10
	vect.push_back(new Truc(1));
	vect.push_back(new Truc(2));
	vect.push_back(new Truc(3));
	cout<<"vecteur size="<<vect.size()<<endl;
 
	cout<<"parcours du vecteur"<<endl;
	for (int i=0;i<vect.size();i++) 
	{	cout <<"element vect "<<i<<" = "<<vect[i]->x<<endl;
	}
 
	cout<<"parcours du vecteur avec iterator"<<endl;
	for (std::vector<Truc*>::iterator w=vect.begin();w!=vect.end();++w)
		cout<< "iterator "<<(*w)->x<<endl;
 
 
	cout<<"clear"<<endl;
	vect.clear(); // appelle les destructeurs et désalloue
	cout<<"vecteur size="<<vect.size()<<endl;
 
 
	return EXIT_SUCCESS;
}
au debut, a deux reprises je crée et detruit un objet... mes constructeurs et destructeurs sont bien appellé (d'auilleur je n'arrive pas a faire appeller un constr. de recopie, quel est la syntaxe?.. qqun sait-il???)
Bref, jusque là tout va bien.
Ensuite, je crée mon vecteur sur Truc*,
je lui reserve 10 places.
ajoute 3 objets.
je les parcours, tout va bien.
à la fin, j'appelle clear(), et là je m'attends a voir les destructeurs, et bien pas du tout...
comment celà sa fait-il ?

question subsidiaire, je trouve laid la maniere dont j'accede à une donnée/metode membre avec les iterator : "(*w)->membre" n'y a t'il pas un truc plus elegant ?

voilà, merci.
a+