Instancier avant ou dans une boucle ?
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:
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:
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 :)