Maison > développement back-end > Golang > le corps du texte

Comment obtenir un Go-Style Defer en C sans sacrifier les performances ?

Mary-Kate Olsen
Libérer: 2024-11-02 21:06:30
original
470 Les gens l'ont consulté

How to Achieve Go-Style Defer in C   Without Sacrificing Performance?

Implémentation différée en C

Le concept de report de style Go, qui permet un nettoyage propre et concis des ressources, a gagné en popularité en C . Cependant, trouver une implémentation de bibliothèque standard ou bien prise en charge pour cette fonctionnalité peut s'avérer difficile.

Malgré l'absence de prise en charge intégrée du report dans la bibliothèque de modèles standard (STL) ou Boost, des implémentations externes sont disponibles. . L'une de ces implémentations est une solution légère et sans surcharge :

<code class="cpp">#ifndef defer
struct defer_dummy {};
template <class F> struct deferrer { F f; ~deferrer() { f(); } };
template <class F> deferrer<F> operator*(defer_dummy, F f) { return {f}; }
#define DEFER_(LINE) zz_defer##LINE
#define DEFER(LINE) DEFER_(LINE)
#define defer auto DEFER(__LINE__) = defer_dummy{} *[&amp;]()
#endif // defer</code>
Copier après la connexion

Cette implémentation nécessite une configuration minimale et peut être facilement intégrée à votre base de code. La syntaxe est simple :

<code class="cpp">defer { statements; };</code>
Copier après la connexion

Par exemple, dans l'extrait de code suivant, l'opération fclose est automatiquement exécutée lorsque la portée de la fonction read_entire_file est quittée :

<code class="cpp">auto file = std::fopen(filename, "rb");
if (!file)
    return false;

defer { std::fclose(file); }; // don't need to write an RAII file wrapper.

// ...</code>
Copier après la connexion

Ce zéro -l'implémentation en surcharge offre un moyen pratique et efficace de gérer le nettoyage des ressources en C, en fournissant une fonctionnalité de report de type Go sans avoir besoin de classes RAII complexes ou de techniques de gestion de mémoire personnalisées.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal