當我試圖刪除導出的對象多態(即:基類有公共虛擬析構函數)爲什麼派生類私人析構函數仍被調用?爲什麼範圍決議私人不在這裏工作。Private Derived Destructor
class Base
{
protected:
Base() { cout << "Base constructor.\n"; }
public:
virtual ~Base() { cout << "Base destructor.\n"; }
};
class Derived :public Base
{
public:
Derived() { cout << "Derived constructor.\n"; }
private:
~Derived() { cout << "Derived destructor.\n"; }
};
int main()
{
Base *p = new Derived();
delete p;
}
輸出:
Base constructor.
Derived constructor.
Derived destructor.
Base destructor.
因爲您通過基類指針調用派生的dtor ... –