【问题标题】: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% 确定。有人能给出一个明确的答案吗?

【问题讨论】:

标签: c++ c++11 language-lawyer


【解决方案1】:

type of ptrvoid (A::*)(),而不是 void (Hacky::*)(),所以没关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多