Seguridad frente a excepciones
Escriba código seguro frente a excepciones
Seguridad frente a excepciones es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Qué significa la seguridad frente a excepciones
La seguridad frente a excepciones describe qué garantías conserva el código cuando se lanza una excepción a mitad de una operación.
La garantía de no lanzar excepciones
Es el nivel más sólido: la operación nunca lanza una excepción. Los destructores, las operaciones de intercambio y las operaciones de movimiento deberían aspirar a este nivel y marcarse como noexcept.
La garantía fuerte
Si la operación lanza una excepción, el estado del programa vuelve atrás como si nunca hubiera comenzado: una semántica de confirmación o reversión.
La garantía básica
Si la operación lanza una excepción, no se filtran recursos y se mantienen todas las invariantes, aunque el estado exacto puede haber cambiado.
Ninguna garantía
Es el nivel más débil: una excepción puede dejar el programa en un estado dañado o con recursos filtrados. Evite escribir código de este tipo.
RAII proporciona la garantía básica
Al envolver los recursos en objetos RAII, el desenrollado de la pila los libera automáticamente, lo que proporciona la garantía básica casi de forma gratuita.
#include <memory>
#include <stdexcept>
void process() {
auto buf = std::make_unique<int[]>(100); // freed even if throw
throw std::runtime_error("oops"); // no leak
}Copy-and-swap para una seguridad fuerte
Una técnica habitual consiste en realizar todo el trabajo arriesgado sobre una copia y después incorporarla mediante swap. El intercambio no lanza excepciones, por lo que el cambio se realiza por completo o no se realiza.
void assign(Widget& target, const Widget& src) {
Widget tmp = src; // may throw, target untouched
using std::swap;
swap(target, tmp); // no-throw commit
}Ordenar las operaciones para confirmar al final
Realice todas las operaciones que puedan lanzar una excepción antes de cualquier cambio irreversible. Una vez que empiece a modificar el estado compartido, no debería ser posible que la operación falle.
Cuidado con las actualizaciones parciales
Actualizar dos miembros cuando el segundo puede lanzar una excepción deja el objeto en un estado incoherente. Prepare ambos y después confírmelos con pasos que no puedan lanzar excepciones.
Los destructores no deben lanzar excepciones
Un destructor que lanza una excepción durante el desenrollado llama a std::terminate. Mantenga los destructores sin excepciones para conservar las garantías de seguridad.
Elegir una garantía
Procure ofrecer la garantía fuerte cuando sea viable, proporcione siempre como mínimo la básica y marque como noexcept las operaciones que realmente no puedan lanzar excepciones.
Comprobación rápida
Compruebe su comprensión de la seguridad frente a excepciones.
Resumen
Ha aprendido los cuatro niveles de seguridad frente a excepciones: sin excepciones, fuerte, básica y ninguna. RAII proporciona automáticamente la garantía básica; copy-and-swap y confirmar al final proporcionan la garantía fuerte. Mantenga los destructores y las operaciones de intercambio sin excepciones.
Preguntas frecuentes
¿La lección «Seguridad frente a excepciones» es gratis?
Sí — el texto completo de «Seguridad frente a excepciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Seguridad frente a excepciones»?
Escriba código seguro frente a excepciones Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Seguridad frente a excepciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- try, catch, throw
- Seguridad frente a excepciones
- Especificador noexcept
- Tipos de excepciones personalizados