/*
析构函数是为了在对象不被使用之后释放它的资源
虚函数是为了实现多态
那么 把析构函数声明为virtual有什么作用呢
*/
#include<iostream>
using namespace std;
class Base
{
public:
Base() {};//Base的构造函数
~Base() //Base的析构函数
{
cout<<"Output from the destructor of class Base!"<<endl;
};
virtual void DoSomething()
{
cout<<"Do something in class Base!"<<endl;
};
};
class Derived : public Base
{
public:
Derived(){}; //Derived的构造函数
~Derived()
{
cout<<"Output from the destructor of class Derived!"<<endl;
};
void DoSomething()
{
cout<<"Do something in class Derived!"<<endl;
};
};
int main()
{
Derived *pTest1=new Derived();//Derived类的指针
pTest1->DoSomething();
delete pTest1; //delete对象时,会自动调用析构函数
cout<<endl;
Base *pTest2=new Derived();//Base类的指针
pTest2->DoSomething();
delete pTest2;//这个delete只释放了Base类的析构函数
return 0;
}
/*
若再代码13行加上virtual
此时释放指针pTest2时,由于 Base的析构函数是virtual的
就会先找到并执行Derived类的析构函数
然后执行Base类的析构函数 资源正常释放 避免了内存泄漏
就会调用 Derived的析构函数
*/
180页虚析构函数
最新推荐文章于 2022-07-18 22:04:08 发布