不使用虚析构函数的情况(P263)

/*

前提要点:
如果一个基类指针指向的对象是用new运算符动态生成的派生类对象,那么释放该对象所占用的空间,如果仅调用基类的析构函数,则只会完成该析构函数内的空间释放,不会涉及派生类析构函数内的空间释放,容易造成内存泄漏。

声明虚析构函数的格式:
virtual ~类名();
虚析构函数没有返回值类型,没有参数。
如果一个类的析构函数是虚函数,则由它派生的所有子类的析构函数也是虚析构函数。使用虚析构函数的目的是为了在对象消亡时实现多态。--》保证使用基类类型的指针能够调用适当的析构函数针对不同的对象进行清理工作。

*/

#include<iostream>
using namespace std;
class ABase
{
public:
ABase()
{
cout<<"ABase构造函数"<<endl;
}
virtual ~ABase()
{
cout<<"ABase析构函数"<<endl;
}
};

class Derived:public ABase
{
public:
int w,h;
Derived()
{
cout<<"Derived 构造函数"<<endl;
w = 4;
h = 7;
}
~Derived()
{
cout<<"Derived 构造函数"<<endl;
}
};

int main()
{
ABase *p = new Derived();
delete p;
return 0;
}

posted @ 2020-03-31 09:32  CollisionDimension  阅读(193)  评论(0)    收藏  举报