1.3 KiB
1.3 KiB
Exemples / DO-DON'T — Chapitre 28 — defer et nettoyage
Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
Exemples actuellement présents dans le chapitre
Exemple 1
{
acquireA();
defer {
releaseA();
}
acquireB();
defer {
releaseB();
}
work();
}
Exemple 2
releaseB();
releaseA();
Exemple 3
fin normale
return
throw
break
continue
emit quittant le scope concerné
Exemple 4
throw
-> unwind des scopes quittés
-> defer de ces scopes, LIFO
-> catch correspondant éventuel
-> defer du scope catch, LIFO
-> finally éventuel
-> continuation normale ou propagation
Exemple 5
return
throw
break
continue
emit
DO / DON'T / WHY / compiler error / edge cases
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration 0.2.12 conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
Fault et cleanup
defer {
fault CleanupFault(...); // ERROR : fault explicite escaping
}
Un Fault dynamique produit indirectement reste possible car il est unchecked ; l'ordre exact d'unwind/destruction est encore à fermer.