C++ --虚析构和纯虚析构
虚析构和纯虚析构
前言: 当使用父类指针指向子类对象,delete指针时,只会调用父类的析构函数,而不会调用子类的析构函数。这就存在子类对象没被释放
的问题,导致内存泄漏
- 父类上使用
虚析构
和纯虚析构
都能解决上面的问题,但是需要注意:纯虚析构也要有具体实现;且如果包含了纯析构函数,则变成了一个抽象类。 - 形式:virtual ~父类名() {}
//虚析构和纯虚析构
//场景:当使用父类指针指向子类对象,delete指针时,只会调用父类的析构函数,而不会调用子类的析构函数。这就存在子类对象没被释放的问题,导致内存泄漏
//父类上使用虚析构和纯虚析构都能解决上面的问题,但是需要注意:纯虚析构也要有具体实现;且如果包含了纯析构函数,则变成了一个抽象类。
//形式:virtual ~父类名() {}
class Base
{public:virtual void function() = 0;Base(){cout << "Base构造函数\n";}//虚析构virtual ~Base(){cout << "Base析构函数\n";}
};
class Son : public Base
{public://属性创建在堆上int* p_age;void function(){cout << "Son is working " << *p_age << endl;}Son(int age){p_age = new int(age);cout << "Son构造函数\n";}~Son(){if (p_age != NULL){delete p_age;p_age = NULL;}cout << "Son析构函数\n";}
};
void test()
{Base* b = new Son(20);b->function();delete b;
}
int main()
{test();return 0;
}
C++ --虚析构和纯虚析构相关推荐
- C++虚析构和纯虚析构
C++虚析构和纯虚析构 虚析构和纯虚析构 示例 总结 虚析构和纯虚析构 多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码 解决方式:将父类中的析构函数改为虚析构或者 ...
- c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)
虚析构和纯虚析构 虚析构 virtual ~类名(){} 类内声明,类内实现 解决问题:通过父类指针指向子类对象释放时候不干净的问题 纯虚析构 写法 virtual ~类名(){}=0; 类内声明 类 ...
- C++_类和对象_C++多态_虚析构和纯虚析构函数---C++语言工作笔记074
然后我们再来看,虚析构和纯虚析构函数的用法,上面有大体的介绍了. 但是我们还是用一个例子来说明一下更好. 首先,我们去创建一个Animal类,类中我们去写上一个spreak这个,纯虚函数,然后,让我们 ...
- c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)
目录 4.7 多态 4.7.1 多态的基本概念(超级重要) 4.7.2 多态的原理刨析(超级重要) 4.7.2 多态案例一:计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 ...
- C++虚函数、纯虚函数、虚析构、纯虚析构、动态绑定和抽象类详解。
目录 1.虚函数的概念 2.虚函数的定义 3.虚函数的作用 4.用虚函数实现多态的方法 5.动态绑定和静态绑定 6.纯虚函数和抽象类 7.虚析构和纯虚析构 1.虚函数的概念 在C++程序中我们经常可以 ...
- C++中的各种“虚“-- 虚函数、纯虚函数、虚继承、虚基类、虚析构、纯虚析构、抽象类讲解
C++中的各种"虚" 1. 菱形继承 1.1 虚继承 && 虚基类 1.2 虚基类指针(vbptr)&& 虚基类表(vbtable) 2. 多态 2 ...
- C++面向对象-26-虚析构和纯虚析构
这篇来学习多态中可能会发生内存泄漏和解决办法,就要使用到虚析构函数和纯虚析构函数.先不介绍概念,肯定和前面学构造函数和析构函数中的析构函数有关系.先通过引出问题,然后介绍这两个概念和特点. 1.多态基 ...
- 虚析构和纯虚析构原理
虚析构和纯虚析构原理 直接上代码:请根据编号查看代码说明. 先总结: 虚析构或纯虚析构就是用来解决通过父类指针释放子类对象 如果子类中没有堆区数据,可以不写为虚析构或纯虚析构 拥有纯虚析构函数的类也属 ...
- C++类与对象笔记十四:多态六:虚析构和纯虚析构
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用子类的析构代码. 即:父类指针无法调用子类实例对象内的析构函数.造成堆区内存泄漏. 解决方案:将父类中的析构函数改为虚析构或者纯虚析 ...
- C++多态之虚析构与纯虚析构
一.虚析构与纯虚析构的共同点: 都是释放子类的堆区资源. 都需要具体实现. 二.虚析构与纯虚析构的不同点: 使用纯虚析构函数的父类属于抽象类,不能实例化具体对象.代码示例如下: #include &l ...
最新文章
- squid与varnish
- quant companies
- typescript赋值
- ubuntu18.0.4 不能下载 libgd2-dev(ubuntu 20.04 安装perl 中GD 模块失败的解决办法)
- 菜鸟车辆路径规划创造26项世界纪录 实际可降低10.3%配送成本
- 顺序存取和随机存取的区别_内存和硬盘的区别
- Redmi K40系统截图曝光:配备顶级2K屏幕+骁龙870移动平台
- MVC中modelstate的使用
- Python(2.7.6) 迭代器
- 定时监控服务,告警,并启动服务
- 使用Pspice进行电路仿真
- 淘宝开店之旅_我要充一充
- 『可道云』内网穿透牛刀小试,会敲键盘就能搭建的私有云网盘
- Fama三因子和Carhat 四因子的介绍和计算
- 数学英语不好可以学计算机么,数学不好,英语不行,非计算机专业,可以学IT吗?...
- 唇语识别技术的开源教程,听不见声音我也能知道你说什么!
- 计算机控制系统软件设计,计算机控制技术第7章 计算机控制系统软件设计.ppt
- 这200道java大厂面试题全部掌握,“面试”想去哪就去哪
- 发那科机器人有可能用到的系统变量总结(定期更新)
- 如何发现我所爱?如何做我所爱?