dynamic_cast<> 反对随机指针?
dynamic_cast<> against random pointers?
能否dynamic_cast<>
用于针对可能来自某个随机位置的指针。换句话说,一个指针可能指向 int
或者可能指向某个未知结构?
如果是,它如何访问 vtable
未知的东西;不会尝试通过指针访问 vtable
只是指向内存中的某处并可能导致 GPF
?
TIA!!
来自 this dynamic_cast
reference:
dynamic_cast < new_type > ( expression )
...
expression
- lvalue of a complete class type if new_type
is a reference, prvalue of a pointer to complete class type if new_type
is a pointer.
[强调我的]
complete class 类型 在这里很重要,因为这意味着你不能真正将任何通用指针传递给 dynamic_cast
.
expression
的类型也必须与 new_type
[相关(即 base-class、child-class 或 sibling-class),否则行为将是未定义的。
如果您将 dynamic_cast
与任何 "random pointer" 一起使用,您将得到 undefined behavior,虽然编译器可能会警告您(尽管并非总是可能),但它仍在尝试做一些导致 UB 的事情是你作为程序员的责任。
能否dynamic_cast<>
用于针对可能来自某个随机位置的指针。换句话说,一个指针可能指向 int
或者可能指向某个未知结构?
如果是,它如何访问 vtable
未知的东西;不会尝试通过指针访问 vtable
只是指向内存中的某处并可能导致 GPF
?
TIA!!
来自 this dynamic_cast
reference:
dynamic_cast < new_type > ( expression )
...
expression
- lvalue of a complete class type ifnew_type
is a reference, prvalue of a pointer to complete class type ifnew_type
is a pointer.
[强调我的]
complete class 类型 在这里很重要,因为这意味着你不能真正将任何通用指针传递给 dynamic_cast
.
expression
的类型也必须与 new_type
[相关(即 base-class、child-class 或 sibling-class),否则行为将是未定义的。
如果您将 dynamic_cast
与任何 "random pointer" 一起使用,您将得到 undefined behavior,虽然编译器可能会警告您(尽管并非总是可能),但它仍在尝试做一些导致 UB 的事情是你作为程序员的责任。