dynamic_cast <>针对随机指针?

时间:2018-08-05 05:56:15

标签: c++ dynamic-cast

可以dynamic_cast<>用于可能来自某个随机位置的指针。换句话说,可能指向int或可能指向某些未知结构的指针?

如果是,它将如何访问未知内容的vtable;是否不会尝试通过给定的指针仅访问内存中的某个位置来访问vtable并可能导致GPF

TIA !!

1 个答案:

答案 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是您的程序员。