Al trabajar con C# o Java, solía crear clases de excepciones que incluían otras excepciones como miembros de la clase. Por ejemplo:Excepciones dentro de excepciones en C++
public class MyException : Exception {
private MyException ex;
private String message;
public String what() {
return this.message;
}
public String stack() {
if(ex != null) {
StringBuilder s;
s.append(this.what());
s.append(this.ex.stack());
return s.toString();
}
return this.what();
}
}
que estaba buscando ejemplos sobre el mismo tema, pero para C++ y no pude encontrar ninguna (tal vez no lo hice búsqueda de los términos adecuados, como se puede ver el título de esta pregunta no es muy elegante).
De todos modos, ¿cuál es la forma correcta de hacerlo en C++? ¿Es para almacenar la excepción interna como un puntero o una referencia? (Creo que podría necesitar un puntero para que pueda ser nulo cuando sea la primera excepción). Cuando presento la excepción, ¿debería ser como un puntero creado con new
?
EDITAR: Tal vez lo que escribí fue un poco confuso o no una práctica de programación bien conocida (aceptada). Así que voy a especificar cómo tenía la intención de utilizar esta clase con un fragmento:
try {
// Code that throws an exception of type MyException
} catch(MyException ex) {
MyException another = new MyException();
another.setEx(ex);
another.setMessage("A message that explains where the other exception was caught and on what conditions");
throw another;
}
no puede tener múltiples excepciones en C++. Si se lanza una nueva excepción antes de capturar la excepción actual, el programa finaliza (más precisamente se llama a 'std :: terminate') –
@Gene: Esta es una variación en re-lanzamiento, donde la excepción existente se rellena dentro de una nueva excepción . Probablemente no sea factible sin recolección de basura. –
@Ben Voigt: Probablemente factible sin recolección de basura si no fuera tan difícil recordar exactamente cuándo se llaman a los destructores. –