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.
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 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; } };
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???)
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; }
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+
Partager