我知道私有(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
库的成员...以及其他B
的A
库的成员!
这与private
相反,后者的类型为A
的某些对象始终可以调用另一个类型为private
的对象的A
成员。
关于c++ - 为什么我们不能从派生类中调用 protected 析构函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19468900/