/*Child is inherited from Parent*/
class Parent {
public:
Parent() //Constructor
{
cout << "\n Parent constructor called\n" << endl;
}
protected:
~Parent() //Dtor
{
cout << "\n Parent destructor called\n" << endl;
}
};
class Child : public Parent
{
public:
Child() //Ctor
{
cout << "\nChild constructor called\n" << endl;
}
~Child() //dtor
{
cout << "\nChild destructor called\n" << endl;
}
};
int main()
{
Parent * p2 = new Child;
delete p2;
return 0;
}
如果我使Parent
的析構函數爲虛擬的,那麼我得到一個錯誤,那麼使受保護的析構函數成爲虛擬的目的是什麼?有沒有用於使受保護的析構函數虛擬?
也許我們應該從「爲什麼要讓dtor保護?」開始。 –
你爲什麼想要使析構函數爲虛擬?不應該*你*知道目的?受保護的析構函數意味着對象不應該通過基本指針被破壞,所以'main'中的代碼是錯誤的。 – thiton
請參閱http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – user998692