Video: Învață Programare Orientată Obiect: Laborator 6 (actualizat 2019) 2024
O funcție C ++ care alocă resurse la nivel local poate necesita o captură de excepție, face o prelucrare și apoi o reînsuflețește în lanțul de stivă. Luați în considerare următorul exemplu:
void fileFunc () {outstream * pOut = newstream ("File.txt"); otherFunction (); ștergeți pOut;}
După cum știu mulți programatori, memoria alocată de noi nu este returnată automat pe heap. Dacă altfunction () ar arunca o excepție, controlul va ieși din program fără a invoca delete, și memoria alocată la începutul fileFunc () ar fi pierdută.
void fileFunc () {ofstream * pOut = newstream ("File.txt"); încercați {otherFunction (); ștergeți pOut;} captura (…) {delete pOut; throw}}}În cadrul acestei fraze, fileFunc () returnează memoria pe care a alocat-o anterior. Cu toate acestea, nu este în măsură să proceseze restul excepției, deoarece nu are nicio idee despre ce ar fi putut merge prost. Nici măcar nu știe ce tip de obiect a prins.