C ++ de programación: lanzar excepciones

Una función de C ++ que asigna recursos a nivel local puede tener que capturar una excepción, hacer algo de procesamiento, y luego volver a lanzar para arriba la cadena de pila. Considere el siguiente ejemplo:

anular fileFunc () {ofstream * Pout = new ofstream ("archivo.txt") - otherFunction () - borrar pOut-}

Como muchos programadores saben, la memoria asignada por nuevo ISN # 8242-t regresó a la pila de forma automática. Si otherFunction () fueron a una excepción, el control sería salir del programa sin invocar eliminar, y la memoria asignada al inicio de fileFunc () se perdería.

Para evitar este problema, fileFunc () puede incluir una captura(...) para recoger cualquier excepción lanzada:

sin efecto fileFunc () {ofstream * Pout = new ofstream ("archivo.txt") - try {otherFunction () - eliminar pOut-} catch (...) {borrar puchero-throw-}}

Dentro de esta frase, fileFunc () devuelve la memoria asignó anteriormente a la pila. Sin embargo, no está en condiciones de procesar el resto de la excepción, ya que no tiene idea de lo que pudo haber salido mal. Ni siquiera sabía qué tipo de objeto que acaba de coger.

los lanzar palabra clave sin ningún argumento vuelve a lanzar el objeto de excepción vigente copia de seguridad de la cadena de alguna función que puede procesar correctamente el error.




» » » » C ++ de programación: lanzar excepciones