Dans la foulée de discussions récentes à propos d'habitudes et bonnes pratiques, ceci est un exemple récurrrent où j'hésite entre l'une ou l'autre écriture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
	std::string s;
	for ( ...; ...; ...)
	{
		s.clear();
		get_string(s);
		....
	}
	std::vector<unsigned> v;
	for ( ...; ...; ...)
	{
		v.clear();
		get_vector(v);
		....
	}
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
	for ( ...; ...; ...)
	{
		std::string s;
		get_string(s);
		....
	}
	for ( ...; ...; ...)
	{
		std::vector<unsigned> v;
		get_vector(v);
		....
	}
La 2ème écriture est la plus "naturelle", mais je me demande si la 1ère n'est pas plus performante. Des allocations/désallocations de mém ont lieu systématiquement à chaque itération dans le 2ème cas, avec un "peu de chance" elle seront moins fréquentes dans le 1er.

On peut généraliser le pb à toute classe autre que string ou vector. Vaut-il mieux instancier un type à l'interieur d'une boucle, ou en dehors juste avant d'y entrer ?

Merci