析构函数是在对象消亡时,自动被调用,用来释放对象占用的空间。
虚析构函数执行优先级是子到父,继承中的析构函数也是子到父。
我们是否可利用继承的关系,达到虚析构的效果。
上代码
#include<iostream>
using namespace std;
class Preson
{
public:
~Preson()
{
cout << "i am ~preson\n";
}
};
class chind:public Preson
{
public:
~chind()
{
cout << " i am ~chind \n";
}
};
int main()
{
Preson* p = new chind;
//delete特点 1.释放的时候只看是什么函数类型就执行什么函数类型的析构函数
//2.不管执行的是什么函数类型的析构函数 申请的空间 依旧释放
delete (chind*)p;
system("pause");
return 0;
}
执行结果
i am ~chind
i am ~preson
请按任意键继续. . .
现在我们用虚析构函数
#include<iostream>
using namespace std;
class Preson
{
public:
virtual ~Preson()
{
cout << "i am ~preson\n";
}
};
class chind:public Preson
{
public:
~chind()
{
cout << " i am ~chind \n";
}
};
int main()
{
Preson* p = new chind;
//delete特点 1.释放的时候只看是什么函数类型就执行什么函数类型的析构函数
//2.不管执行的是什么函数类型的析构函数 申请的空间 依旧释放
delete p;
system("pause");
return 0;
}
执行结果
i am ~chind
i am ~preson
请按任意键继续. . .
可以看出效果是一样的
总结:delete (强转类型) p 我们依旧释放了 new chind 只不过执行的析构函数不同