Video: From C to Python by Ross Rheingans-Yoo 2025
En C + + -funktion, der tildeler ressourcer lokalt, kan muligvis tage en undtagelse, gøre noget forarbejdning og derefter sætte den op på stakekæden igen. Overvej følgende eksempel:
void fileFunc () {ofstream * pOut = nystream ("File. Txt"); otherFunction (); slet pOut;}
Som mange programmerere ved, returneres hukommelsen tildelt af ny ikke automatisk til bunken. Hvis otherFunction () skulle give en undtagelse, ville kontrollen afslutte programmet uden at påberåbe sig delete, , og den hukommelse, der blev tildelt i begyndelsen af filenFunc () ville gå tabt.
For at undgå dette problem kan fileFunc () indeholde en fangst (…) for at fange enhver undtagelse kastet:
void fileFunc () {ofstream * pOut = newstream ("File. Txt"); prøv {otherFunction (); slet pOut;} catch (…) {delete pOut; kaste;}}
Inden for denne sætning returnerer filenFunc () den hukommelse, den tidligere allokerede til bunken. Det er imidlertid ikke i stand til at behandle resten af undtagelsen, fordi det ikke har nogen anelse om, hvad der kunne være gået galt. Det ved ikke engang, hvilken type objekt den lige har fanget.
Kasteordet uden argumenter rethrows det nuværende undtagelsesobjekt sikkerhedskopiere kæden til en funktion, der korrekt kan behandle fejlen.