Maison > développement back-end > C++ > Dois-je fermer manuellement un « ifstream » en C ?

Dois-je fermer manuellement un « ifstream » en C ?

DDD
Libérer: 2024-11-26 02:17:09
original
869 Les gens l'ont consulté

Should I Manually Close an `ifstream` in C  ?

Dois-je fermer manuellement un ifstream ?

En C, l'acquisition des ressources est l'initialisation (RAII) garantit que les objets sont automatiquement nettoyés et libérés lorsqu'ils sortent de la portée. Ce mécanisme est utilisé dans diverses classes, notamment std::ifstream.

Lorsqu'un objet std::ifstream est créé, il ouvre le fichier spécifié pour la saisie. Par défaut, le fichier reste ouvert jusqu'à ce que l'objet soit détruit. Cependant, une question courante se pose : dois-je appeler explicitement file.close() manuellement ou puis-je compter sur RAII pour le gérer ?

La réponse est NON.

RAII et ifstream

Le but de RAII est précisément de réduire le besoin de nettoyage manuel des ressources. Dans le cas d'ifstream, le destructeur est responsable de la fermeture du fichier associé, rendant inutiles les appels explicites à file.close().

Dans l'exemple de code fourni, l'objet fichier est déclaré dans la portée de readContentsOfFile () fonction. Lorsque la fonction revient, l'objet sort de la portée et le destructeur est appelé automatiquement. Cela garantit que le fichier est fermé avant la fermeture de la fonction.

Portée imbriquée pour une fermeture anticipée

Bien que RAII garantisse la fermeture du fichier lors de la destruction de l'objet, il peut être souhaitable de fermer le fichier plus tôt dans une fonction. Ceci peut être réalisé en utilisant une portée imbriquée :

{
    std::ifstream file(fileName.c_str());

    if (file.good()) {
        std::stringstream buffer;
        buffer << file.rdbuf();
    }

    file.close();
}
Copier après la connexion

Dans la portée imbriquée, l'objet fichier est créé et ouvert. Si le fichier est valide, il est traité immédiatement et le fichier est fermé avant la fin de la portée interne.

Conclusion

std::ifstream s'occupe déjà du fichier fermeture via RAII. Les appels manuels à file.close() sont inutiles et doivent être évités car ils violent les principes de RAII en C .

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal