我读到虚拟析构函数必须在具有虚拟方法的类中声明。我只是不明白为什么必须将它们声明为虚拟的。我知道为什么我们需要虚拟析构函数,如下例所示。我只是想知道为什么编译器不为我们管理虚拟析构函数。关于虚拟析构函数的工作,我需要了解些什么吗?下面的例子表明,如果析构函数没有声明为虚拟的,那么派生类的析构函数不会被调用,为什么会这样?
class Base
{
// some virtual methods
public:
Base()
{std::cout << "Base Constructor\n";}
~Base()
{std::cout << "Base De-structor\n";}
};
class Derived : public Base
{
public:
Derived()
{std::cout << "Der constructor\n";}
~Derived()
{ std::cout << "Der De-structor\n";}
} ;
void main()
{
Base *b = new Derived();
delete b;
}