/*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