我注意到了std :: bad_cast异常,引用和指针似乎没有相同的方式。例如:std :: bad_cast指针与参考情况
class A { public: ~A() {} };
class B : public A {};
//Case #1
int main()
{
A a;
B& b = dynamic_cast<B&>(a); //Would throw std::bad_cast.
}
//Case #2
int main()
{
A* a = new A;
B* b = dynamic_cast<B*>(a); //Would not throw std::bad_cast.
}
在第一种情况中,产生的std :: bad_cast的一个异常,并且在第二情况下产生也不例外 - 相反,在B刚指针被分配值NULL。
有人可以向我解释为什么只有前者抛出一个异常,当这两个都是bad_cast的例子?我认为这个决定背后有一个很好的动机,并且我滥用了一些东西,因为我不明白这个动机。
你会怎么做呢?当你只是在没有偏见的情况下检查时使用指针,而且这种情况通常是失败的。另一方面,当你知道演员应该成功时使用引用,并在适当的检查点捕获异常。 – 2012-02-23 19:32:01