我知道私有(当然也包括公共)析构函数的用途。
我也知道在派生类中使用受保护的析构函数的用途:
使用受保护的析构函数来防止通过基类指针销毁派生对象
但是我尝试运行下面的代码,它无法编译:
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 调用一个受保护的方法,它将正常工作。那么为什么调用析构函数不同呢?
*this
以外的基类对象的受保护成员函数。 - dyp