我正在尝试将dynamic_cast,一个虚拟类转移到另一个虚拟类:
SomeClass::SomeFunc(_AListner& listner)
_BListner* listner = dynamic_cast<_BListner*>(&listner)
请注意,类_BListner派生自类_AListner。
但是我在调试时遇到了这个错误:
SIGSEGV, Segmentaion fault.
<some address> in __dynamic_cast () from /usr/lib/libstdc++
答案 0 :(得分:1)
可以在dynamic_cast
时触发SIGSEGV:
或
dynamic_cast
的表达式的静态类型,而不仅仅是它指向的对象的动态类型)。最后一种情况应该由编译器捕获。
答案 1 :(得分:0)
你提到_BListner是从_AListner派生的。你有_CListner这样的第三方类,它也来自_AListner吗?如果是这样,则允许将_CListner对象传递给您的函数,但dynamic_cast会失败并抛出类型为std :: bad_cast的异常。最终不会捕获该异常可能导致SIGSEGV。
只是一个假设,你肯定需要提供更多信息。