通过继承和函数指针绕过保护
Posted
技术标签:
【中文标题】通过继承和函数指针绕过保护【英文标题】:Bypassing protected with inheritance and function pointer 【发布时间】:2021-11-01 16:37:31 【问题描述】:我已经多次看到以下模式用于访问受保护的成员函数。
class A
public:
virtual ~A();
protected:
void foo()
;
class B : public A;
class Hacky : public B
public:
using B::foo;
;
int main()
B b;
A& a = b;
auto ptr = &Hacky::foo;
(a.*ptr)();
我认为这是this page 之后的未定义行为,内置指向成员的访问运算符,第 5 点(这里 E1 动态类型是 B,它不包含 Hacky::foo),但我'我不能 100% 确定。有人能给出一个明确的答案吗?
【问题讨论】:
这个答案***.com/questions/49550663/…是针对字段的,但是推理应该是一样的, 【参考方案1】:type of ptr
是 void (A::*)()
,而不是 void (Hacky::*)()
,所以没关系。
【讨论】:
以上是关于通过继承和函数指针绕过保护的主要内容,如果未能解决你的问题,请参考以下文章