Gérer l'acquisition de ressources avec std::ifstream et RAII
Si vous travaillez avec des E/S de fichiers en C, vous vous demandez peut-être si vous devez fermer manuellement un ifstream ouvert.
RAII et File E/S
L'idiome C Resource Acquisition Is Initialization (RAII) simplifie la gestion des ressources en garantissant que les ressources sont automatiquement acquises et libérées lorsque la durée de vie d'un objet commence et se termine, respectivement.
Dans le cas de std::ifstream, RAII fonctionne comme suit :
Avez-vous besoin de fermer ifstream manuellement ?
Non. Grâce à RAII, vous n'avez pas besoin d'appeler manuellement ifstream::close(). Le destructeur se chargera de cette tâche pour vous.
Fermeture manuelle considérée comme nuisible
La fermeture manuelle d'un ifstream n'est pas l'approche C préférée. Cela va à l'encontre de l'objectif du RAII en réintroduisant des fuites de ressources potentielles (si vous oubliez de fermer le fichier) et des conditions de concurrence (si le fichier est fermé prématurément).
Quand fermer manuellement
Bien que RAII s'occupe généralement de la fermeture des fichiers, il peut arriver que vous deviez fermer un fichier prématurément. Dans de tels cas, vous pouvez créer une portée imbriquée :
if (file.good()) { { std::stringstream buffer; buffer << file.rdbuf(); } // File will be closed here return buffer.str(); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!