我知道私有(当然还有公共)析构函数的用途。
我也知道在派生类中使用受保护的析构函数:
使用受保护的析构函数来防止通过基类指针破坏派生对象
但我尝试运行以下代码,但无法编译:
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 不一样呢?