Question sur vector::clear()
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/]:
Citation:
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.
de fils en aiguille j'ai donc tester ce code:
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 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);
} |
EDIT: le code a était édité L71.
É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 (:roll:) mais j’attends justement vos lumières sur ce point.
EDIT: Windows MS Visual C++ 2010
Merci d'avance.