SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
5.4 Manejo de Excepciones
Manejo de excepciones

 • El manejo de excepciones de C++ se
   centra alrededor del uso de la palabra
   reservada try y de la palabra
   reservada catch.




                 Mtl. Lourdes Cahuich       2
Manejo de excepciones

 • Un programador incluye código que
   puede activar una excepción dentro de
   un bloque try.
 • Uno o varios bloques de catch
   inmediatamente siguen al bloque de
   try excepción




                Mtl. Lourdes Cahuich       3
Manejo de excepciones

 • Cuando una excepción ocurre en un
   bloque de try, el punto de ejecución
   del programa es transferido al bloque
   de catch que corresponda al tipo de
   excepción arrojada.




                 Mtl. Lourdes Cahuich      4
Manejo de excepciones

 • El bloque de catch ejecuta las tareas
   necesarias para una recuperación de la
   condición de excepción .
 • En otras palabras, “maneja” la
   excepción




                 Mtl. Lourdes Cahuich       5
#include <iostream>
#include <cstdlib>
#include <stdexcept>
using namespace std;
void calculate_fibonacci(int);
int main(int argc, char* argv[]) {
    try {
        if (argc != 2) {
            cerr << quot;Usage: quot; << argv[0] << quot; numquot; << endl;
            return EXIT_FAILURE;
        }
        int number_fib = atoi(argv[1]);
        calculate_fibonacci(number_fib);
        return EXIT_SUCCESS;
    }
    catch (exception& e) {
        cerr << e.what() << endl;
    }
    return EXIT_FAILURE;
}
void calculate_fibonacci(int number_fib) {
    int* array = new int[number_fib];
    array[0] = 1;
    array[1] = 1;    // populate the elements with Fibonacci numbers
    for (int i = 2; i < number_fib; i++) {
        array[i] = array[i - 1] + array[i - 2];
    }
    delete [] array;
                            Mtl. Lourdes Cahuich                       6
}
Manejo de excepciones

 • Se activan las excepciones utilizando el
   estatuto throw.
 • En un estatuto throw, un programador
   especifica la excepción a activar
   después de la palabra throw.




                 Mtl. Lourdes Cahuich         7
Manejo de excepciones

 • En C++, una variable de cualquier tipo
   de dato puede ser arrojada como una
   excepción utilizando el estatuto throw.
 • Esto difiere de Java, donde solo objetos
   y descendientes del tipo
   java.lang.Throwable pueden ser
   arrojados y atrapados.


                 Mtl. Lourdes Cahuich         8
Manejo de excepciones

 • C++ puede arrojar objetos de clases
   definidas por el usuario, objetos de
   clases estándar (como aquellos de la
   clase string), e inclusive variables de los
   tipos de datos fundamentales.
 • En C++ se crean clases de excepción
   definidas por el usuario.


                  Mtl. Lourdes Cahuich           9
Manejo de excepciones

 • Un bloque de catch cuyo argumento
   contiene elipsis atrapa todas las
   excepciones.
 • Esto es útil en situaciones donde un
   programador quiere asegurarse de que
   todas las posibles excepciones son
   atrapadas.


                Mtl. Lourdes Cahuich      10
Manejo de excepciones

 • Una excepción no manejada puede
   causar la terminación anormal de una
   aplicación.




                Mtl. Lourdes Cahuich      11
int main(int argc, char* argv[]) {
    try {
        if (argc == 1) {
           throw    runtime_error(quot;runtime errorquot;);
       }
       if (argc == 2) {
           throw out_of_range(quot;out of rangequot;);
       }
       if (argc == 3) {
           throw length_error(quot;length errorquot;);
       }
       return EXIT_SUCCESS;
    }
    catch (...) {
       cerr << quot;An exception was caught!quot; << endl;
    }
    return EXIT_FAILURE;
}
                     Mtl. Lourdes Cahuich             12
La Jerarquía Estándar de Excepción de
C++
 • La biblioteca estándar de C++ provee y
    utiliza una jerarquía estándar de clases
    de excepción.
 • Las clases contenidas en esta jerarquía
    son arrojadas por varios componentes
    del lenguaje C++, la biblioteca estándar
    y la biblioteca de plantillas estándar


                  Mtl. Lourdes Cahuich         13
Mtl. Lourdes Cahuich   14
La Jerarquía Estándar de Excepción de
C++
 • Las excepciones bad_alloc y
    out_of_range son dos excepciones
    estándar a las que ponemos cuidadosa
    atención en este curso.
 • La excepción bad_alloc es arrojada
    por el operador new cuando la memoria
    no puede ser provista en la forma en la
    que es requerida.

                 Mtl. Lourdes Cahuich         15
La Jerarquía Estándar de Excepción de
C++
 • La excepción out_of_range es
    arrojada por la función miembro at del
    tipo vector, cuando se solicita un
    elemento cuyo índice está fuera de
    alcance




                  Mtl. Lourdes Cahuich       16
La Jerarquía Estándar de Excepción de
C++
 • Los programadores pueden extender la
    jerarquía estándar de excepción
    definiendo sus propias clases de
    excepción que heredan de una de las
    clases estándares de excepción.




                Mtl. Lourdes Cahuich      17
Como Usar los Manejadores Intermediarios

 • Los manejadores de excepción intermediarios
   son manejadores de excepción que atrapan
   una excepción, libera algunos recursos e
   inmediatamente después vuelven a arrojar la
   excepción.
 • Los manejadores de excepción intermediarios
   son utilizados para asegurar que toda la
   memoria asignada sea propiamente liberada
   aún y cuando el programa pase el control a
   un manejador de excepciones.

                  Mtl. Lourdes Cahuich           18
Como Usar los Manejadores Intermediarios

 • Esto se torna complicado cuando
   consideramos que una excepción puede
   causar que un programa transfiera el
   control a un bloque de catch en una
   rutina diferente




                Mtl. Lourdes Cahuich       19
#include <iostream>
#include <cstdlib>
#include <stdexcept>
using namespace std;
void method_two() {
    throw out_of_range(quot;out of rangequot;);
}
void method_one() {
    int *array = new int[100];
    method_two();
    delete [] array;
}
int main(int argc, char* argv[]) {
    try {
        method_one();
        return EXIT_SUCCESS;
    }
    catch (exception& e) {
        cerr << e.what() << endl;
    }
    catch (...) {
        cerr << quot;Unknown exception!quot; << endl;
    }
    return EXIT_FAILURE;
                         Mtl. Lourdes Cahuich   20
}
Como Usar los Manejadores Intermediarios

 • El listado que se acaba de mostrar ilustra la
   dificultad que introduce el manejo explícito de
   memoria al manejo de excepciones y porque
   necesitamos manejadores intermediarios de
   excepciones.
 • Se incluye una función method_one que
   asigna un arreglo entero en memoria.
 • Antes, method_one libera este arreglo, la
   función llama a method_two.


                    Mtl. Lourdes Cahuich             21
Como Usar los Manejadores Intermediarios

 • La función method_two
   inmediatamente arroja una excepción.
 • El control es entonces transferido al
   más cercano y apropiado bloque de
   catch.




                 Mtl. Lourdes Cahuich      22
Como Usar los Manejadores Intermediarios

 • Sin embargo, este bloque de catch
   existe en la función main.
 • La transferencia de control a este
   bloque de catch se salta la ejecución
   del estatuto delete [] en
   method_one.
 • Esto resulta en una pérdida de
   memoria.

                 Mtl. Lourdes Cahuich      23

Más contenido relacionado

La actualidad más candente

Programación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesProgramación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesAndoni Eguíluz Morán
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepcionesJuan Mancilla
 
1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion1 1 5 Objetos Excepcion
1 1 5 Objetos ExcepcionUVM
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en JavaJohn Ortiz
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)jbersosa
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepcionesjbersosa
 
Java exceptions
Java exceptionsJava exceptions
Java exceptionssandropaul
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en javajent46
 
4. Instrucciones Y Excepciones
4.  Instrucciones Y Excepciones4.  Instrucciones Y Excepciones
4. Instrucciones Y Excepcionesstalin.calderon
 
Semana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuarioSemana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuariovictdiazm
 
Java excepciones
Java excepcionesJava excepciones
Java excepcionesricardo_79
 
DTS Azure anomaly detector.pptx
DTS Azure anomaly detector.pptxDTS Azure anomaly detector.pptx
DTS Azure anomaly detector.pptxicebeam7
 
3...3 manejo de excepciones y la clase string
3...3 manejo de excepciones y la clase string3...3 manejo de excepciones y la clase string
3...3 manejo de excepciones y la clase stringJacqui Venegas
 

La actualidad más candente (18)

Programación III (Java) - 04 Excepciones
Programación III (Java) - 04 ExcepcionesProgramación III (Java) - 04 Excepciones
Programación III (Java) - 04 Excepciones
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion1 1 5 Objetos Excepcion
1 1 5 Objetos Excepcion
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
5.manejo de excepciones
5.manejo de excepciones5.manejo de excepciones
5.manejo de excepciones
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)
 
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONESJAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
 
05 java excepciones
05 java excepciones05 java excepciones
05 java excepciones
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepciones
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
Manejo De Excepciones
Manejo De ExcepcionesManejo De Excepciones
Manejo De Excepciones
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
4. Instrucciones Y Excepciones
4.  Instrucciones Y Excepciones4.  Instrucciones Y Excepciones
4. Instrucciones Y Excepciones
 
Semana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuarioSemana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuario
 
Java excepciones
Java excepcionesJava excepciones
Java excepciones
 
DTS Azure anomaly detector.pptx
DTS Azure anomaly detector.pptxDTS Azure anomaly detector.pptx
DTS Azure anomaly detector.pptx
 
3...3 manejo de excepciones y la clase string
3...3 manejo de excepciones y la clase string3...3 manejo de excepciones y la clase string
3...3 manejo de excepciones y la clase string
 

Similar a 5 Mecanismos Reuntilizacion Abstraccion Final

Similar a 5 Mecanismos Reuntilizacion Abstraccion Final (20)

Programación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 ExcepcionesProgramación Orientada a Objetos - Unidad 5 Excepciones
Programación Orientada a Objetos - Unidad 5 Excepciones
 
Capitulo 16- Excepciones en Java
Capitulo 16- Excepciones en JavaCapitulo 16- Excepciones en Java
Capitulo 16- Excepciones en Java
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
6 excepciones
6 excepciones6 excepciones
6 excepciones
 
Resumen
ResumenResumen
Resumen
 
Java4-Exepciones.ppt
Java4-Exepciones.pptJava4-Exepciones.ppt
Java4-Exepciones.ppt
 
Java4-Exepciones.ppt
Java4-Exepciones.pptJava4-Exepciones.ppt
Java4-Exepciones.ppt
 
Guia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesGuia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesaserciones
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
 
UDA-Anexo gestión de excepciones
UDA-Anexo gestión de excepcionesUDA-Anexo gestión de excepciones
UDA-Anexo gestión de excepciones
 
Cu00927 c gestion excepciones java try catch finally ejemplos ejercicios
Cu00927 c gestion excepciones java try catch finally ejemplos ejerciciosCu00927 c gestion excepciones java try catch finally ejemplos ejercicios
Cu00927 c gestion excepciones java try catch finally ejemplos ejercicios
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
SCJP, Clase 5: Control de Flujo
SCJP, Clase 5: Control de FlujoSCJP, Clase 5: Control de Flujo
SCJP, Clase 5: Control de Flujo
 
Tipos de excepciones
Tipos de excepcionesTipos de excepciones
Tipos de excepciones
 
Gestión de Excepciones
Gestión de ExcepcionesGestión de Excepciones
Gestión de Excepciones
 
11 Excepciones
11   Excepciones11   Excepciones
11 Excepciones
 
Taller 1 4
Taller 1 4Taller 1 4
Taller 1 4
 
Clase 5
Clase 5Clase 5
Clase 5
 
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantesUsando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
 

Más de UVM

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programaciónUVM
 
Portafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaPortafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaUVM
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempoUVM
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosUVM
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglosUVM
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadoresUVM
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlUVM
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadoresUVM
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicosUVM
 
Resolución práctica de tipos de datos
Resolución práctica de tipos de datosResolución práctica de tipos de datos
Resolución práctica de tipos de datosUVM
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funcionesUVM
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funcionesUVM
 
Manejo de bits
Manejo de bitsManejo de bits
Manejo de bitsUVM
 
Aclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreAclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreUVM
 
Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3UVM
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuarioUVM
 
Función main()
Función main()Función main()
Función main()UVM
 
Depuración de un programa en c++
Depuración de un programa en c++Depuración de un programa en c++
Depuración de un programa en c++UVM
 
Algunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoAlgunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoUVM
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++UVM
 

Más de UVM (20)

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programación
 
Portafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaPortafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación Avanzada
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempo
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicos
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglos
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadores
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicos
 
Resolución práctica de tipos de datos
Resolución práctica de tipos de datosResolución práctica de tipos de datos
Resolución práctica de tipos de datos
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funciones
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funciones
 
Manejo de bits
Manejo de bitsManejo de bits
Manejo de bits
 
Aclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreAclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembre
 
Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuario
 
Función main()
Función main()Función main()
Función main()
 
Depuración de un programa en c++
Depuración de un programa en c++Depuración de un programa en c++
Depuración de un programa en c++
 
Algunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoAlgunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agosto
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++
 

5 Mecanismos Reuntilizacion Abstraccion Final

  • 1. 5.4 Manejo de Excepciones
  • 2. Manejo de excepciones • El manejo de excepciones de C++ se centra alrededor del uso de la palabra reservada try y de la palabra reservada catch. Mtl. Lourdes Cahuich 2
  • 3. Manejo de excepciones • Un programador incluye código que puede activar una excepción dentro de un bloque try. • Uno o varios bloques de catch inmediatamente siguen al bloque de try excepción Mtl. Lourdes Cahuich 3
  • 4. Manejo de excepciones • Cuando una excepción ocurre en un bloque de try, el punto de ejecución del programa es transferido al bloque de catch que corresponda al tipo de excepción arrojada. Mtl. Lourdes Cahuich 4
  • 5. Manejo de excepciones • El bloque de catch ejecuta las tareas necesarias para una recuperación de la condición de excepción . • En otras palabras, “maneja” la excepción Mtl. Lourdes Cahuich 5
  • 6. #include <iostream> #include <cstdlib> #include <stdexcept> using namespace std; void calculate_fibonacci(int); int main(int argc, char* argv[]) { try { if (argc != 2) { cerr << quot;Usage: quot; << argv[0] << quot; numquot; << endl; return EXIT_FAILURE; } int number_fib = atoi(argv[1]); calculate_fibonacci(number_fib); return EXIT_SUCCESS; } catch (exception& e) { cerr << e.what() << endl; } return EXIT_FAILURE; } void calculate_fibonacci(int number_fib) { int* array = new int[number_fib]; array[0] = 1; array[1] = 1; // populate the elements with Fibonacci numbers for (int i = 2; i < number_fib; i++) { array[i] = array[i - 1] + array[i - 2]; } delete [] array; Mtl. Lourdes Cahuich 6 }
  • 7. Manejo de excepciones • Se activan las excepciones utilizando el estatuto throw. • En un estatuto throw, un programador especifica la excepción a activar después de la palabra throw. Mtl. Lourdes Cahuich 7
  • 8. Manejo de excepciones • En C++, una variable de cualquier tipo de dato puede ser arrojada como una excepción utilizando el estatuto throw. • Esto difiere de Java, donde solo objetos y descendientes del tipo java.lang.Throwable pueden ser arrojados y atrapados. Mtl. Lourdes Cahuich 8
  • 9. Manejo de excepciones • C++ puede arrojar objetos de clases definidas por el usuario, objetos de clases estándar (como aquellos de la clase string), e inclusive variables de los tipos de datos fundamentales. • En C++ se crean clases de excepción definidas por el usuario. Mtl. Lourdes Cahuich 9
  • 10. Manejo de excepciones • Un bloque de catch cuyo argumento contiene elipsis atrapa todas las excepciones. • Esto es útil en situaciones donde un programador quiere asegurarse de que todas las posibles excepciones son atrapadas. Mtl. Lourdes Cahuich 10
  • 11. Manejo de excepciones • Una excepción no manejada puede causar la terminación anormal de una aplicación. Mtl. Lourdes Cahuich 11
  • 12. int main(int argc, char* argv[]) { try { if (argc == 1) { throw runtime_error(quot;runtime errorquot;); } if (argc == 2) { throw out_of_range(quot;out of rangequot;); } if (argc == 3) { throw length_error(quot;length errorquot;); } return EXIT_SUCCESS; } catch (...) { cerr << quot;An exception was caught!quot; << endl; } return EXIT_FAILURE; } Mtl. Lourdes Cahuich 12
  • 13. La Jerarquía Estándar de Excepción de C++ • La biblioteca estándar de C++ provee y utiliza una jerarquía estándar de clases de excepción. • Las clases contenidas en esta jerarquía son arrojadas por varios componentes del lenguaje C++, la biblioteca estándar y la biblioteca de plantillas estándar Mtl. Lourdes Cahuich 13
  • 15. La Jerarquía Estándar de Excepción de C++ • Las excepciones bad_alloc y out_of_range son dos excepciones estándar a las que ponemos cuidadosa atención en este curso. • La excepción bad_alloc es arrojada por el operador new cuando la memoria no puede ser provista en la forma en la que es requerida. Mtl. Lourdes Cahuich 15
  • 16. La Jerarquía Estándar de Excepción de C++ • La excepción out_of_range es arrojada por la función miembro at del tipo vector, cuando se solicita un elemento cuyo índice está fuera de alcance Mtl. Lourdes Cahuich 16
  • 17. La Jerarquía Estándar de Excepción de C++ • Los programadores pueden extender la jerarquía estándar de excepción definiendo sus propias clases de excepción que heredan de una de las clases estándares de excepción. Mtl. Lourdes Cahuich 17
  • 18. Como Usar los Manejadores Intermediarios • Los manejadores de excepción intermediarios son manejadores de excepción que atrapan una excepción, libera algunos recursos e inmediatamente después vuelven a arrojar la excepción. • Los manejadores de excepción intermediarios son utilizados para asegurar que toda la memoria asignada sea propiamente liberada aún y cuando el programa pase el control a un manejador de excepciones. Mtl. Lourdes Cahuich 18
  • 19. Como Usar los Manejadores Intermediarios • Esto se torna complicado cuando consideramos que una excepción puede causar que un programa transfiera el control a un bloque de catch en una rutina diferente Mtl. Lourdes Cahuich 19
  • 20. #include <iostream> #include <cstdlib> #include <stdexcept> using namespace std; void method_two() { throw out_of_range(quot;out of rangequot;); } void method_one() { int *array = new int[100]; method_two(); delete [] array; } int main(int argc, char* argv[]) { try { method_one(); return EXIT_SUCCESS; } catch (exception& e) { cerr << e.what() << endl; } catch (...) { cerr << quot;Unknown exception!quot; << endl; } return EXIT_FAILURE; Mtl. Lourdes Cahuich 20 }
  • 21. Como Usar los Manejadores Intermediarios • El listado que se acaba de mostrar ilustra la dificultad que introduce el manejo explícito de memoria al manejo de excepciones y porque necesitamos manejadores intermediarios de excepciones. • Se incluye una función method_one que asigna un arreglo entero en memoria. • Antes, method_one libera este arreglo, la función llama a method_two. Mtl. Lourdes Cahuich 21
  • 22. Como Usar los Manejadores Intermediarios • La función method_two inmediatamente arroja una excepción. • El control es entonces transferido al más cercano y apropiado bloque de catch. Mtl. Lourdes Cahuich 22
  • 23. Como Usar los Manejadores Intermediarios • Sin embargo, este bloque de catch existe en la función main. • La transferencia de control a este bloque de catch se salta la ejecución del estatuto delete [] en method_one. • Esto resulta en una pérdida de memoria. Mtl. Lourdes Cahuich 23