我正在进行一项实验,并在我从程序中打开的程序和共享库中定义了相同的类,并确保程序在其动态表中没有类型信息对象的条目。然后我从共享库中抛出该类的一个对象,并尝试使用相同的类类型来捕获它。
我预计 linux 和 gcc 上的实现不会捕获异常,因为程序和共享库中两个类的类型信息对象不同,因此只有在运行时对损坏的类进行字符串比较时,才有可能匹配名字。
它仍然匹配,我什至可以对共享库中定义的类进行动态向下转换。谁能解释一下在这种情况下实现是如何工作的,好吗?
编辑
根据 Itanium ABI 的陈述,观察到的行为似乎不符合标准。我在这里想念什么?
因此,除了指向不完整类型的直接或间接指针外,等式和不等式运算符在对这些 type_info 对象进行操作时可以写成地址比较:两个 type_info 结构描述相同的类型当且仅当它们是相同的结构(同时地址)。
由于这两个 typeinfo 有不同的地址,因此所描述的结构代表不同的类型。因此,强制转换应该失败并且不应该捕获异常。