C++ · Avançado · Inglês · Técnico
stack unwinding
Processo de desfazer a pilha de chamadas quando uma exceção é lançada, destruindo na ordem inversa os objetos locais de cada frame até encontrar um catch compatível.
Onde usar
É o que torna o RAII seguro com exceções: destrutores liberam recursos durante o desenrolar. Em code review, um destrutor que lança durante esse processo termina o programa.
Em código
struct G { ~G() { std::cout << "limpa "; } };
void f() { G g; throw 1; }
int main() {
try { f(); }
catch (int) { std::cout << "pego"; }
} // imprime: limpa pegoExemplos
During stack unwinding the destructors of all locals run.
Durante o stack unwinding, os destrutores de todas as locais rodam.
A destructor that throws during stack unwinding calls terminate.
Um destrutor que lança durante o stack unwinding chama terminate.
Cuidado
Se nenhuma captura for encontrada, é definido pela implementação se a pilha chega a ser desenrolada antes de std::terminate.
Sinônimos
desenrolar da pilha