Scott Meyers dice:Si una excepción lanzada es siempre una copia del objeto de excepción, ¿por qué no se invoca este constructor de copia?
C++ especifica que un objeto lanzado como una excepción siempre se copia y la copia se realiza mediante la copia constructor del objeto.
Pero en mi código:
struct test
{
test() { cout << "constructor is called" << endl; }
test(const test&) { cout << "copy constructor is called" << endl; }
~test() { cout << "destructor is called" << endl; }
};
void fun()
{
throw test();
}
int main()
{
try {
fun();
}
catch (test& t1) { cout << "exception handler" << endl; }
}
no veo constructor de copia del objeto de excepción que se llama.
Si cambio el catch
para recibir el objeto de excepción por valor, entonces lo es, pero según la cita de Meyers, el objeto de excepción debería haber sido copiado incluso cuando se recibió por referencia.
¿Por qué no se llama al constructor de copia (incluso cuando el manejo de excepciones se realiza por referencia)?
¿Cuál es su pregunta? – cdeszaq
La pregunta es "¿qué está mal: Meyers o mi compilador?" No cierre las preguntas simplemente porque no las entiende. –