Manejo de excepciones C++

Cómo hago esto,

Tengo una clase llamada LargeInteger que almacena un número máximo de 20 dígitos. hice el constructor

LargeInteger::LargeInteger(string number){ init(number); }

Ahora, si el número es > LargeInteger::MAX_DIGITS (miembro constante estático), es decir, 20, no quiero crear el objeto y lanzar una excepción.

Creé una clase LargeIntegerException{ ... }; e hizo esto

void init(string number) throw(LargeIntegerException);
void LargeInteger::init(string number) throw(LargeIntegerException)
{
    if(number.length > MAX_DIGITS)
    throw LargeIntegerException(LargeIntegerException::OUT_OF_BOUNDS);
    else ......
}

Así que ahora modifiqué el constructor.

LargeInteger::LargeInteger(string number)
{ try {init(number);} catch(LargeIntegerExceptione) {...} }

Ahora tengo 2 preguntas
1.¿Se creará el objeto de esta clase en caso de que se produzca una excepción?
2.¿Cómo manejarlo si lo anterior es cierto?

preguntado el 28 de julio de 12 a las 01:07

2 Respuestas

No, si se lanza una excepción en el constructor, el objeto no se construye (siempre que no lo atrape, como lo hace).

Por lo tanto, no detecte la excepción, sino que deje que se propague al contexto de llamada.

En mi opinión, este es el enfoque correcto: si el objeto no se puede inicializar directamente, inicie una excepción en el constructor y no cree el objeto.

Respondido 28 Jul 12, 01:07

Entonces, ¿dónde capturo la excepción entonces? - jeffrey chen

@JeffreyChen donde sea que llame al constructor. - Luciano Grigore

No hay razón para capturar la excepción en el constructor. Desea que el constructor falle, por lo que algo fuera del constructor tiene que atraparlo. Si un constructor sale por excepción, no se crea ningún objeto.

LargeInteger(string num) { init(num); } // this is just fine.

Respondido 28 Jul 12, 02:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.