我正在使用gcc。我知道虚析构函数如何解决当我们销毁由基类指针指向的派生类对象时的问题。我想知道它们是如何工作的?
class A
{
public:
A(){cout<<"A constructor"<<endl;}
~A(){cout<<"A destructor"<<endl;}
};
class B:public A
{
public:
B(){cout<<"B constructor"<<endl;}
~B(){cout<<"B destructor"<<endl;}
};
int main()
{
A * a = new B();
delete a;
getch();
return 0;
}
当我将A的析构函数改为虚函数时,问题得到解决。这是为什么呢?我为什么要将A的析构函数设置为虚函数?我想知道A和B的虚表会发生什么变化。