C ++ lanzar puntero desreferenciado
¿Cuál es el tipo del objeto de excepción en el siguiente lanzamiento:
Pregunta1>range_error r("error"); throw r;
Answer1> un objeto de range_error
Pregunta2>exception *p = &r; throw *p;
Answer2> un objeto de excepción en rodajas
Pregunta3>exception *p = &r; throw p;
Answer3> se lanza un puntero que apunta a range_error. El manejo de captura puede acceder a las funciones miembro de range_error a través del enlace dinámico.
¿Tengo la pregunta correcta?
// Actualizado y compilado y ejecutado en VS2010
#include <iostream>
using namespace std;
class ExClassA
{
public:
virtual void PrintMe() const
{
cout << "ExClassA" << endl;
}
};
class ExClassB : public ExClassA
{
public:
virtual void PrintMe() const
{
cout << "ExClassB" << endl;
}
};
int main(int argc, char* argv[])
{
ExClassB exClassB;
ExClassA *p = &exClassB;
try
{
throw *p;
}
catch (const ExClassA& e)
{
e.PrintMe();
}
try
{
throw p;
}
catch (const ExClassA* e)
{
e->PrintMe();
}
}
La primera prueba de captura del programa anterior imprime "ExClassA"
El segundo try-catch del programa anterior imprime "ExClassB"