1.主题:
c++中为什么要使用虚析构函数
2.场景复现:
涉及到多态时,我们常用基类指针指向子类对象
使用完毕后调用 delete p释放
3. 问题
delete p调用后执行的是基类的析构函数
假如我们在子类中使用了其他资源,就会导致内存泄漏
4.解决方法:
基类的析构函数增加 virtual 关键字
5.验证:
#include <iostream>
class Base
{
public:
~Base()
{
std::cout << "Base" << std::endl;
}
};
class Drived : public Base
{
public:
~Drived()
{
std::cout << "Drived" << std::endl;
}
};
int main()
{
{
Base *base = new Drived();
delete base;
}
}
输出:
#include <iostream>
class Base
{
public:
virtual ~Base()
{
std::cout << "Base" << std::endl;
}
};
class Drived : public Base
{
public:
~Drived()
{
std::cout << "Drived" << std::endl;
}
};
int main()
{
{
Base *base = new Drived();
delete base;
}
}
输出:
6.原因:
动态绑定范畴,后面在单独讲一下