我知道使用私有(当然还有公共的)析构函数。
我也知道在派生类中使用受保护的析构函数:
使用受保护的析构函数来防止通过基类指针
破坏派生对象
但是我已经尝试运行以下代码并且无法编译:
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中的受保护方法,它将起作用。那么为什么叫d tor不同呢?
答案 0 :(得分:12)
protected
并不意味着您的B
可以访问任何 A
的成员;它只表示它可以访问自己的A
基地的成员......以及其他B
A
基地的成员!
这与private
形成对比,因此某些类型为A
的对象始终可以调用类型为{{1}的另一个对象的private
成员}。