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"

Respuestas a la pregunta(3)

Su respuesta a la pregunta