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/]:
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 : 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);
}
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 () mais j’attends justement vos lumières sur ce point.

EDIT: Windows MS Visual C++ 2010

Merci d'avance.