Junior
O que são exceções em C++?
sobes.tech IA
Resposta da IA
Mecanismo de tratamento de situações anómalas (erros) que ocorrem durante a execução do programa. Permite separar o código responsável pela lógica do programa do código de tratamento de erros.
Palavras-chave:
try: Define um bloco de código onde podem ocorrer exceções.catch: Define um bloco de código que é executado quando ocorre um tipo específico de exceção.throw: Gera (cria) uma exceção. O tipo de exceção pode ser qualquer objeto.
Princípio de funcionamento:
- O código que pode causar um erro é colocado no bloco
try. - Se uma exceção ocorrer no bloco
try(gerada comthrow), a execução normal do programa é interrompida. - O sistema procura um bloco
catchadequado capaz de lidar com a exceção gerada (por tipo). - Se um
catchcorrespondente for encontrado, seu código é executado. - Se um
catchadequado não for encontrado no nível atual de chamadas, a exceção é "propagada" para cima na pilha de chamadas até que uma função de tratamento adequada seja encontrada (ou o programa termine incorretamente).
Exemplo:
#include <iostream>
#include <stdexcept> // Para tipos padrão de exceções
int divide(int a, int b) {
if (b == 0) {
throw std::runtime_error("Divisão por zero!"); // Gera uma exceção
}
return a / b;
}
int main() {
try {
int result = divide(10, 0); // Chama uma função que pode lançar exceção
std::cout << "Resultado: " << result << std::endl; // Esta linha não será executada
} catch (const std::runtime_error& e) { // Captura a exceção do tipo std::runtime_error
std::cerr << "Erro: " << e.what() << std::endl; // Processa a exceção
} catch (...) { // Captura qualquer outra exceção (ponto de suspensão)
std::cerr << "Ocorreu um erro desconhecido." << std::endl;
}
std::cout << "O programa continua após o tratamento do erro." << std::endl;
return 0;
}
Vantagens:
- Separação da lógica e do tratamento de erros.
- Simplificação do fluxo principal do código.
- Capacidade de tratar erros em diferentes níveis da hierarquia de chamadas.
Desvantagens:
- Pode afetar o desempenho (devido à propagação da pilha).
- Dificuldade de compreensão do fluxo de execução com múltiplas exceções.
- Uso incorreto pode levar a vazamentos de recursos (se os recursos não forem liberados ao ocorrer uma exceção antes de sua liberação correta).
Para trabalhar com segurança com recursos na presença de exceções, frequentemente utilizam-se RAII (Resource Acquisition Is Initialization) e ponteiros inteligentes.