Bonjour amis développeurs,
étant sur un projet et n'ayant pas fais de C++ depuis quelque mois maintenant, je décide de m'y remettre.
Voila rapidement ma question:
Dans la doc, à propos de vector::clear(), il est dit[source: http://www.cplusplus.com/reference/stl/vector/clear/]:
de fils en aiguille j'ai donc tester ce code:void clear ( );
Clear content
All the elements of the vector are dropped: their destructors are called, and then they are removed from the vector container, leaving the container with a size of 0.
EDIT: le code a était édité L71.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 #include <vector> #include <string> #include <iostream> using namespace std; // class de test class Test { private: string _name; //pointeur de test string *_job; public: Test(string const & name, string * const job): _name(name), _job(job){} // delete le pointeur ~Test() { //affiche quelque chose pour signifier l'appel au destructeur cout << "dest: " << _name << endl; delete _job; } // methode de test void print() const { cout << this->_name << " my job is: " << *this->_job << endl; } }; int main(int ac, char **av) { //initialisation avec de pointeur vector<Test *> vec; Test *t1 = new Test("My name is 1", new string("JOB1")); Test *t2 = new Test("My name is 2", new string("JOB2")); Test *t3 = new Test("My name is 3", new string("JOB3")); // ca marche (encore heureux...) t1->print(); t2->print(); t3->print(); //assignation au vector vec.clear(); vec.resize(3); vec[0] = t1; vec[1] = t2; vec[2] = t3; { vector<Test *>::iterator b = vec.begin(); vector<Test *>::iterator e = vec.end(); //je parcour vite fait le vector (la encore, ca marche) for (; b != e; ++b) { cout << "FROM VECTOR: "; (*b)->print(); } /* Clear() est sence appeller le destructeur de mes Test*, deletant ainsi le _job. */ vec.clear(); } //Et donc, si j'en crois la doc, ceci ne devrai pas fonctionner: t1->print(); t2->print(); t3->print(); /* Ceci appel bien le destructeur et donc plante si decommenter: t1->~Test(); t1->print(); //*/ ::system("PAUSE"); return (0); }
Évidement le code ci-dessus fonctionne et ne plante pas,
j'en déduis donc que les destructeurs ne sont pas appelés, est-ce normal?
Je subodore avoir loupé quelque chose () mais j’attends justement vos lumières sur ce point.
EDIT: Windows MS Visual C++ 2010
Merci d'avance.
Partager