有什么理由不使用dynamic_cast的地址来引用?

时间:2011-12-30 13:14:48

标签: c++ dynamic-cast

有没有理由拒绝使用Foo* foo = &dynamic_cast<Foo&>(*ptrFoobase);?如果演员表不正确,我希望它抛出bad_cast,并保存指针对零的额外检查。

2 个答案:

答案 0 :(得分:3)

没有一个严格的普遍原因,你不应该这样做,但它有点丑陋,难以阅读。

如果您已经决定抛出异常是正确的事情,那么您应该重新考虑其他设计选择:为什么需要指针?如果您坚持使用引用,则没有问题:Foo & foo = dynamic_cast<Foo&>(fooBaseRef);

就个人而言,我会说,如果你在C ++中有裸指针,你就会处于某种遗留的心态,所以你应该只需要添加null-check并手动抛出。另一方面,如果你想使用惯用的现代C ++,一直喜欢引用,你可以免费获得异常。

答案 1 :(得分:1)

如果ptrFoobase可能为空,则无效。