可以dynamic_cast<>
用于可能来自某个随机位置的指针。换句话说,可能指向int
或可能指向某些未知结构的指针?
如果是,它将如何访问未知内容的vtable
;是否不会尝试通过给定的指针仅访问内存中的某个位置来访问vtable
并可能导致GPF
?
TIA !!
答案 0 :(得分:3)
来自this dynamic_cast
reference:
dynamic_cast < new_type > ( expression )
...
expression
-如果new_type
是引用,则为完整类类型的左值,指向 的指针的前值完整的类类型 (如果new_type
是指针)。
[重点突出]
完整类类型在这里很重要,因为这意味着您不能真正将任何通用指针传递给dynamic_cast
。
expression
的类型还必须与 new_type
(即基类,子类或同级类),否则行为将是不确定的。
如果将dynamic_cast
与任何“随机指针”一起使用,您将拥有undefined behavior,尽管编译器可能会警告您(尽管并非总是可能),但仍在尝试执行某些操作UB是您的程序员。