c++虚析构和纯虚析构函数
主要是为了解决多态使用时子类有属性开辟到堆区的问题
解决方式:将父类中的析构函数改为虚析构或者纯虚析构
虚析构和纯虚析构共性:
可以解决父类指针释放子类对象
都需要有具体的函数实现
虚析构和纯虚析构区别:
如果是纯虚析构,该类属于抽象类,无法实例化对象
虚析构语法:
virtual ~类名(){}
纯虚析构语法:
virtual ~类名() = 0;
类名::~类名(){}
虚析构和纯虚析构共性:
可以解决父类指针释放子类对象
都需要有具体的函数实现
虚析构和纯虚析构区别:
如果是纯虚析构,该类属于抽象类,无法实例化对象
虚析构语法:
virtual ~类名(){}
纯虚析构语法:
virtual ~类名() = 0;
类名::~类名(){}
产生原因是父类的指针在析构的时候,不会调用子类中的析构函数,导致如果子类中有堆区属性,就会出现内存泄漏,解决方案就是把父类的析构函数改成虚析构,这样子类就会调用自己的析构函数,然后父类在调用自己的析构函数。纯虚析构也可以做到,不过注意,纯虚析构也需要代码实现,不能是空的,因为父类中的堆区的删除是通过父类的析构函数来处理的。
所以虚析构和纯虚析构函数的注意问题就是父类删除的时候会调用他们,所以他们需要声明,也需要定义,其他包括不可实例化对象这些都是一样的。
这些东西都是为了解决堆区用完后删除的问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!