Bonjour,
je cherche à savoir quelle est la durée de vie des objets créés à l'intérieur d'expressions. Par exemple :
#include <stdio.h>
class Fichier {
public:
Fichier(const char* path) {
f = fopen(path, "r");
printf("Ouverture de %s\n", path);
}
~Fichier() {
printf("Fermeture\n");
if (f) fclose(f);
}
FILE* f;
};
void truc(FILE* f) {
printf("Traitement en cours...\n");
}
int main() {
truc(Fichier("test.txt").f);
return 0;
}
Dans main, un objet Fichier est créé, et son membre f est passé comme argument à la fonction truc. Avec les compilateurs que j'ai testés, l'objet est détruit après l'appel de truc et tout se passe bien (le fichier est fermé après être lu) :
Ouverture de test.txt
Traitement en cours...
Fermeture
Est-ce que le C++ garantit cet ordre d'exécution ou est-ce que ça peut changer selon le compilateur ?
Merci