写成虚的是为了在实现多态的时候不造成内存泄露,
如果基类析构函数前不加vitual,派生类对象被销毁后,只会调用基类的析构函数,而不会去调用派生类的析构函数。
比如:
class a
{
int aa;
public:
virtual ~a(){};
};
class b : public a
{
int *bb;
};
如果你这样:
a *pa = new b; // upcast
然后这样:
delete pa;
这句delete, 如果你基类的析构函数不是虚的的话, 就会造成内存泄露, ///具体表现为派生类的内存被释放了而基类没有.
最后一句更正为
pa调用了基类的析构函数 而没有调用class b中的析构函数
本文解释了在C++中为何基类的析构函数应当声明为虚函数。如果不这样做,在多态上下文中删除派生类对象时可能会导致内存泄漏。文章通过一个具体的代码示例说明了这一点,并展示了当基类析构函数不是虚函数时所引发的问题。
969





