Video: From C to Python by Ross Rheingans-Yoo 2025
En C + + -funksjon som allokerer ressurser lokalt, kan trenge å ta et unntak, gjøre litt behandling, og deretter hente den opp i stablingskjeden. Tenk på følgende eksempel:
void fileFunc () {ofstream * pOut = newstream ("File. Txt"); otherFunction (); slett pOut;}
Som mange programmerere vet, blir minnet som er tildelt av ny, ikke returnert til bunken automatisk. Hvis otherFunction () skulle kaste et unntak, ville kontrollen gå ut av programmet uten å påberope slette, og minnet som ble tildelt i begynnelsen av filenFunc () ville gå tapt.
For å unngå dette problemet kan fileFunc () inkludere en fangst (…) for å få noe unntak kastet:
void fileFunc () {ofstream * pOut = nytt ofstream ("File. Txt"); prøv {otherFunction (); slett pOut;} catch (…) {delete pOut; kaste;}}
Innenfor denne setningen returnerer filenFunc () det minnet det tidligere tildelt til bunken. Det er imidlertid ikke i stand til å behandle resten av unntaket fordi det ikke har noen anelse om hva som kunne ha gått galt. Det vet ikke engang hvilken type gjenstand det bare fanget.
Kasteordet uten argumenter rethrows det nåværende unntaksobjektet opp igjen kjeden til en funksjon som kan behandle feilen på riktig måte.
