0Pricing
C++ Academy · Aula

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

  1. try, catch, throw
  2. Segurança contra exceções
  3. Especificador noexcept
  4. Tipos de exceção personalizados
← Voltar para C++ Academy