Qu'est-ce que l'implémentation Standard Defer/Finalizer en C ?
Le concept de fonctions « différer », inspiré de Go, permet un report exécution des tâches spécifiées après la sortie de la portée actuelle. Cela permet le nettoyage des ressources, la journalisation ou d'autres actions qui doivent être déclenchées lorsqu'un point spécifique du code est atteint.
Implémentations STL et Boost
La norme C La bibliothèque (STL) et la bibliothèque Boost ne fournissent pas d'implémentation intégrée d'une classe defer. Cependant, il existe des bibliothèques tierces qui gèrent cette fonctionnalité.
Une implémentation différée personnalisée
Si les bibliothèques externes ne sont pas une option, l'implémentation personnalisée suivante peut être utilisée pour émuler la fonctionnalité de report :
<code class="cpp">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{} *[&]()</code>
Utilisation
Pour utiliser cette implémentation, écrivez simplement :
<code class="cpp">defer { statements; };</code>
Exemple
Considérez le code suivant :
<code class="cpp">#include <cstdio> #include <cstdlib> defer { std::fclose(file); }; // don't need to write an RAII file wrapper. // File reading code... return 0;</code>
Dans cet exemple, le bloc defer garantit que le fichier est fermé, que la fonction renvoie avec succès ou non.
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!