有没有理由拒绝使用Foo* foo = &dynamic_cast<Foo&>(*ptrFoobase);
?如果演员表不正确,我希望它抛出bad_cast,并保存指针对零的额外检查。
答案 0 :(得分:3)
没有一个严格的普遍原因,你不应该这样做,但它有点丑陋,难以阅读。
如果您已经决定抛出异常是正确的事情,那么您应该重新考虑其他设计选择:为什么需要指针?如果您坚持使用引用,则没有问题:Foo & foo = dynamic_cast<Foo&>(fooBaseRef);
。
就个人而言,我会说,如果你在C ++中有裸指针,你就会处于某种遗留的心态,所以你应该只需要添加null-check并手动抛出。另一方面,如果你想使用惯用的现代C ++,一直喜欢引用,你可以免费获得异常。
答案 1 :(得分:1)
如果ptrFoobase
可能为空,则无效。