我在源代码中使用dynamic_cast来将指针转换为下面的一些东西,
Base *base = here storing the pointer; Derived *derived = dynamic_cast<Derived*>(base);
在base的情况下,没有类层次结构的指针,所以cast失败并返回NULL.接下来我检查NULL.所以没有问题.
我碰到一个崩溃转储,由于dynamic_cast抛出异常,我的应用程序崩溃了.
我知道dynamic_cast只有在与引用类型一起使用时才会抛出.
任何想法当dynamic_cast可以抛出异常使用指针,因为我在上面的源代码?
解决方法
Any idea when the dynamic_cast can throw exception when used with pointer as I used in above source?
在一个定义明确的程序中,它不能.该标准不允许:
[C++11: 5.2.7/9]:
The value of a Failed cast to pointer type is the null pointer value of the required result type. A Failed cast to reference type throwsstd::bad_cast
(18.7.2).
但是,如果您将dynamic_cast传递给无效指针,则调用未定义的行为,并且可能会发生任何事情,包括某些实现定义的C异常或运行时崩溃.