C ++ lança ponteiro não referenciado
Qual é o tipo do objeto de exceção apresentado a seguir:
Pergunta1>range_error r("error"); throw r;
Answer1> um objeto de range_error
Pergunta2>exception *p = &r; throw *p;
Answer2> um objeto fatiado de exceção
Pergunta3>exception *p = &r; throw p;
Answer3> um ponteiro apontando para range_error é lançado. A manipulação de captura pode acessar as funções de membro range_error por meio de ligação dinâmic
Eu entendi essas perguntas, certo?
// Atualizado e compilado e executado no 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();
}
}
A primeira tentativa de captura do programa acima imprime "ExClassA"
A segunda tentativa de captura do programa acima imprime "ExClassB"