Las excepciones en C++ proporcionan una forma de manejar situaciones excepcionales o errores de manera estructurada y robusta. Al lanzar y capturar excepciones, puedes escribir código que se recupere graciosamente de condiciones inesperadas. Vamos a explorar cómo trabajar con excepciones en C++.
Lanzar una Excepción
Para lanzar una excepción, utilizamos la palabra clave `throw`. Puedes lanzar cualquier tipo de objeto, pero es común lanzar objetos de clases derivadas de `std::exception` o sus subclases.
#include <iostream>
#include <exception>
void dividir(int a, int b) {
if (b == 0) {
throw std::runtime_error("División por cero");
}
std::cout << "Resultado de la división: " << a / b << std::endl;
}
int main() {
try {
dividir(10, 0);
} catch (const std::exception& e) {
std::cerr << "Se produjo una excepción: " << e.what() << std::endl;
}
return 0;
}
En este ejemplo, lanzamos una excepción de tipo `std::runtime_error` cuando intentamos dividir por cero.
Capturar una Excepción
Para capturar una excepción y manejarla, utilizamos bloques `try` y `catch`.
try {
// Código que puede lanzar una excepción
} catch (TipoDeExcepcion& e) {
// Código para manejar la excepción
}
El bloque `catch` se ejecuta si se lanza una excepción del tipo especificado.
Excepciones Personalizadas
Puedes crear tus propias clases de excepción derivadas de `std::exception` para representar situaciones específicas.
class MiExcepcion : public std::exception {
public:
const char* what() const noexcept override {
return "Ocurrió una excepción personalizada.";
}
};
int main() {
try {
throw MiExcepcion();
} catch (const std::exception& e) {
std::cerr << "Se produjo una excepción: " << e.what() << std::endl;
}
return 0;
}
Bloque `catch (...)`
Puedes usar `catch (...)` para capturar cualquier tipo de excepción.
try {
// Código que puede lanzar una excepción
} catch (...) {
std::cerr << "Se produjo una excepción." << std::endl;
}
Uso Responsable de Excepciones
Usa excepciones para situaciones excepcionales, no para control de flujo normal.
Asegúrate de liberar recursos antes de lanzar una excepción.
Las excepciones son herramientas poderosas para escribir código robusto que se recupera de situaciones inesperadas. Sin embargo, deben usarse con cuidado para garantizar un comportamiento predecible.