Segurança contra exceções
Escreva código seguro contra exceções
Segurança contra exceções é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
O que significa segurança contra exceções
Segurança contra exceções descreve quais garantias seu código mantém quando uma exceção é lançada no meio de uma operação.
A garantia de não lançamento
O nível mais forte: a operação nunca lança uma exceção. Destrutores, trocas e operações de movimentação devem buscar isso e ser marcados como noexcept.
A garantia forte
Se a operação lançar uma exceção, o estado do programa será revertido como se ela nunca tivesse começado — uma semântica de confirmação ou reversão.
A garantia básica
Se a operação lançar uma exceção, nenhum recurso vazará e todos os invariantes serão preservados, embora o estado exato possa ter mudado.
A ausência de garantia
O nível mais fraco: uma exceção pode deixar o programa em um estado corrompido ou com vazamentos. Evite escrever esse tipo de código.
RAII fornece a garantia básica
Ao encapsular recursos em objetos RAII, o desenrolamento da pilha os libera automaticamente — fornecendo a garantia básica praticamente sem esforço.
#include <memory>
#include <stdexcept>
void process() {
auto buf = std::make_unique<int[]>(100); // freed even if throw
throw std::runtime_error("oops"); // no leak
}Cópia e troca para obter segurança forte
Uma técnica comum: faça todo o trabalho arriscado em uma cópia e depois use swap para substituí-la. A troca não lança exceções, portanto a alteração é feita por completo ou não é feita.
void assign(Widget& target, const Widget& src) {
Widget tmp = src; // may throw, target untouched
using std::swap;
swap(target, tmp); // no-throw commit
}Ordene as operações para confirmar por último
Execute todas as operações que podem lançar exceções antes de qualquer alteração irreversível. Depois que começar a modificar o estado compartilhado, você não deverá mais poder falhar.
Cuidado com atualizações parciais
Atualizar dois membros quando o segundo pode lançar uma exceção deixa o objeto inconsistente. Prepare ambos e confirme os dois com etapas que não lancem exceções.
Destrutores não devem lançar exceções
Um destrutor que lança uma exceção durante o desenrolamento chama std::terminate. Mantenha os destrutores sem lançamento para preservar as garantias de segurança.
Escolhendo uma garantia
Busque a garantia forte quando for viável, forneça sempre pelo menos a básica e marque como noexcept as operações que realmente não lançam exceções.
Verificação rápida
Teste sua compreensão da segurança contra exceções.
Recapitulação
Você aprendeu os quatro níveis de segurança contra exceções: sem lançamento, forte, básica e nenhuma. RAII fornece automaticamente a garantia básica; a cópia e troca e a confirmação por último fornecem a garantia forte. Mantenha destrutores e trocas sem lançamento.
Perguntas Frequentes
A aula “Segurança contra exceções” é grátis?
Sim — o texto completo de “Segurança contra exceções” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Segurança contra exceções”?
Escreva código seguro contra exceções Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Segurança contra exceções”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- try, catch, throw
- Segurança contra exceções
- Especificador noexcept
- Tipos de exceção personalizados