写成虚的是为了在实现多态的时候不造成内存泄露,
如果基类析构函数前不加vitual,派生类对象被销毁后,只会调用基类的析构函数,而不会去调用派生类的析构函数。
class A
{
public:
A(){TRACE("A()/n");};
~A(){TRACE("~A()/n");};
};
class B : public A
{
public:
B(){TRACE("B()/n");};
~B(){TRACE("~B()/n");};
};
void CEgDlg::OnButton1()
{
A * p = (A*)new B() ;
delete p ;
}
运行结果如下:
A()
B()
~A()
http://blog.youkuaiyun.com/dragonfly0939/archive/2008/10/28/3168977.aspx