我知道私有(private)(当然是公共(public))析构函数的用法。

我也知道派生类中 protected 析构函数的用法:



但是我尝试运行以下代码,但无法编译:

struct A{
    int i;
    A() { i = 0;}
    protected: ~A(){}
};

struct B: public A{
    A* a;
    B(){ a = new A();}
    void f(){ delete a; }
};


int main()
{
   B b= B();
   b.f();
   return 0;
}

我得到:
void B::f()':
main.cpp:9:16: error: 'A::~A()' is protected

我想念什么?

如果我从f()内部在A中调用一个 protected 方法,它将起作用。那么为什么叫d'tor是不同的呢?

最佳答案

protected并不意味着您的B可以访问任何A的成员;这仅意味着它可以访问其自己的A库的成员...以及其他BA库的成员!

这与private相反,后者的类型为A的某些对象始终可以调用另一个类型为private的对象的A成员。

关于c++ - 为什么我们不能从派生类中调用 protected 析构函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19468900/

10-13 08:31