虚析构函数

class BaseClass
{
public:
	BaseClass() {}
	~BaseClass() 
	{
		std::cout << "delete BaseClass" << std::endl;
	}
};
 
class ChildClassA : public BaseClass
{
public:
	ChildClassA() {}
	~ChildClassA() 
	{
		std::cout << "ChildClassA Delete" << std::endl;
	}
};
class ChildClassB : public ChildClassA
{
public:
	ChildClassB() {}
	~ChildClassB()
	{
		std::cout << "ChildClassB Delete" << std::endl;
	}
};
void main(){
    // 测试案例
    BaseClass *a = new ChildClassA();
	BaseClass *b = new ChildClassB();
	ChildClassA *c = new ChildClassB();
 
	delete a;
	a = nullptr;
	std::cout << std::endl;
 
	delete b;
	b = nullptr;
	std::cout << std::endl;
 
	delete c;
	c = nullptr;
}
//delete BaseClass
//
//delete BaseClass
//
//ChildClassA Delete
//delete BaseClass
class BaseClass
{
public:
	BaseClass() {}
	virtual ~BaseClass() 
	{
		std::cout << "delete BaseClass" << std::endl;
	}
};
//ChildClassA Delete
//delete BaseClass
//
//ChildClassB Delete
//delete BaseClass
//
//ChildClassB Delete
//ChildClassA Delete
//delete BaseClass

 虚析构函数:当基类指针指向子类对象的时候,需要把基类的析构函数设置成虚析构,防止内存泄露

posted @   wuyuan2011woaini  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2017-06-16 微软TTS语音引擎编程入门
点击右上角即可分享
微信分享提示