En D (pour celles et ceux qui ne connaissent pas, c'est un langage à ramasse-miettes compilé nativement qui se veut un remplaçant de C++ avec 90% de sa puissance et 10% de sa complexité), cette fonctionnalité existe sous la forme de scope guards : il suffit de préfixer une instruction (ou un bloc d'instructions) par scope(exit) et elle sera exécutée à la fin du bloc de code actuel (pas de la fonction, sauf s'il s'agit du bloc principal de la fonction bien sûr).
Il y a aussi scope(success) : l'instruction ne sera exécutée que s'il n'y a pas eu d'exception levée, et scope(failure) que s'il y a eu une exception levée avant la fin de l'exécution du bloc courant.
# Les scope guards en D
Posté par raphj (site web personnel) . En réponse au journal Une 20-aine de lignes de code pour le defer de Go en C++. Évalué à 10. Dernière modification le 07 février 2022 à 19:58.
En D (pour celles et ceux qui ne connaissent pas, c'est un langage à ramasse-miettes compilé nativement qui se veut un remplaçant de C++ avec 90% de sa puissance et 10% de sa complexité), cette fonctionnalité existe sous la forme de
scopeguards : il suffit de préfixer une instruction (ou un bloc d'instructions) parscope(exit)et elle sera exécutée à la fin du bloc de code actuel (pas de la fonction, sauf s'il s'agit du bloc principal de la fonction bien sûr).Il y a aussi
scope(success): l'instruction ne sera exécutée que s'il n'y a pas eu d'exception levée, etscope(failure)que s'il y a eu une exception levée avant la fin de l'exécution du bloc courant.La doc vend cette fonctionnalité comme un remplacement de RAII en C++ :