with try son que las instrucciones example code catch c++ exception throw

c++ - son - try catch++



C++: lanzando excepciones, use ''nuevo'' o no? (2)

¿Es apropiado usar throw new FoobarException(Baz argument); o throw FoobarException(Baz argument); ?

Al capturar siempre utilizo catch(FoobarException& e) "por las catch(FoobarException& e) " pero nunca pude encontrar una respuesta sólida si tenía que usar new o no en C ++ (Java definitivamente) o si era solo una preferencia del programador.


Las excepciones en C ++ deben arrojarse por valor y capturarse por referencia.

Entonces esta es la forma correcta:

try { throw FoobarException(argument); } catch( const FoobarException &ex ) { cout << ex.what() << endl; }

No arroje una excepción creada con nueva, ya que quien es responsable de borrarla no está bien definido. Además, realizar asignaciones durante el manejo de errores puede arrojar otra excepción, oscureciendo el problema original.

No tiene que atrapar por referencia constante (no const funcionará bien), pero me gusta hacerlo de todos modos. Sin embargo, siempre debe hacer referencia (no por valor) para atrapar la excepción de forma polimórfica. Si no lo hace, el tipo de la excepción se puede dividir.


a menos que haya algún requisito especial para no hacerlo, siempre tiro por valor y capturo por referencia const . Esto se debe a que el new también podría lanzar una excepción, durante el manejo de errores, es mejor evitar cosas que pueden causar excepciones.