c++虚析构和纯虚析构函数

主要是为了解决多态使用时子类有属性开辟到堆区的问题

解决方式:将父类中的析构函数改为虚析构或者纯虚析构

虚析构和纯虚析构共性:
可以解决父类指针释放子类对象
都需要有具体的函数实现
虚析构和纯虚析构区别:
如果是纯虚析构,该类属于抽象类,无法实例化对象

虚析构语法:
virtual ~类名(){}
纯虚析构语法:
virtual ~类名() = 0;
类名::~类名(){}
产生原因是父类的指针在析构的时候,不会调用子类中的析构函数,导致如果子类中有堆区属性,就会出现内存泄漏,解决方案就是把父类的析构函数改成虚析构,这样子类就会调用自己的析构函数,然后父类在调用自己的析构函数。纯虚析构也可以做到,不过注意,纯虚析构也需要代码实现,不能是空的,因为父类中的堆区的删除是通过父类的析构函数来处理的。
所以虚析构和纯虚析构函数的注意问题就是父类删除的时候会调用他们,所以他们需要声明,也需要定义,其他包括不可实例化对象这些都是一样的。
这些东西都是为了解决堆区用完后删除的问题
posted @   纸包鱼  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示