[STL] question a propos des vectors
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:
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:
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+