我知道私有(private)(当然还有公共(public))析构函数的用途。
我也知道在派生类中使用 protected 析构函数:
Use a protected destructor to prevent the destruction of a derived object via a base-class pointer
但是我试过运行下面的代码,它不会编译:
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/