虚析构和纯虚析构

前言: 当使用父类指针指向子类对象,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++ --虚析构和纯虚析构相关推荐

  1. C++虚析构和纯虚析构

    C++虚析构和纯虚析构 虚析构和纯虚析构 示例 总结 虚析构和纯虚析构 多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码 解决方式:将父类中的析构函数改为虚析构或者 ...

  2. c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)

    虚析构和纯虚析构 虚析构 virtual ~类名(){} 类内声明,类内实现 解决问题:通过父类指针指向子类对象释放时候不干净的问题 纯虚析构 写法 virtual ~类名(){}=0; 类内声明 类 ...

  3. C++_类和对象_C++多态_虚析构和纯虚析构函数---C++语言工作笔记074

    然后我们再来看,虚析构和纯虚析构函数的用法,上面有大体的介绍了. 但是我们还是用一个例子来说明一下更好. 首先,我们去创建一个Animal类,类中我们去写上一个spreak这个,纯虚函数,然后,让我们 ...

  4. c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)

    目录 4.7 多态 4.7.1 多态的基本概念(超级重要) 4.7.2 多态的原理刨析(超级重要) 4.7.2 多态案例一:计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 ...

  5. C++虚函数、纯虚函数、虚析构、纯虚析构、动态绑定和抽象类详解。

    目录 1.虚函数的概念 2.虚函数的定义 3.虚函数的作用 4.用虚函数实现多态的方法 5.动态绑定和静态绑定 6.纯虚函数和抽象类 7.虚析构和纯虚析构 1.虚函数的概念 在C++程序中我们经常可以 ...

  6. C++中的各种“虚“-- 虚函数、纯虚函数、虚继承、虚基类、虚析构、纯虚析构、抽象类讲解

    C++中的各种"虚" 1. 菱形继承 1.1 虚继承 && 虚基类 1.2 虚基类指针(vbptr)&& 虚基类表(vbtable) 2. 多态 2 ...

  7. C++面向对象-26-虚析构和纯虚析构

    这篇来学习多态中可能会发生内存泄漏和解决办法,就要使用到虚析构函数和纯虚析构函数.先不介绍概念,肯定和前面学构造函数和析构函数中的析构函数有关系.先通过引出问题,然后介绍这两个概念和特点. 1.多态基 ...

  8. 虚析构和纯虚析构原理

    虚析构和纯虚析构原理 直接上代码:请根据编号查看代码说明. 先总结: 虚析构或纯虚析构就是用来解决通过父类指针释放子类对象 如果子类中没有堆区数据,可以不写为虚析构或纯虚析构 拥有纯虚析构函数的类也属 ...

  9. C++类与对象笔记十四:多态六:虚析构和纯虚析构

    多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用子类的析构代码. 即:父类指针无法调用子类实例对象内的析构函数.造成堆区内存泄漏. 解决方案:将父类中的析构函数改为虚析构或者纯虚析 ...

  10. C++多态之虚析构与纯虚析构

    一.虚析构与纯虚析构的共同点: 都是释放子类的堆区资源. 都需要具体实现. 二.虚析构与纯虚析构的不同点: 使用纯虚析构函数的父类属于抽象类,不能实例化具体对象.代码示例如下: #include &l ...

最新文章

  1. squid与varnish
  2. quant companies
  3. typescript赋值
  4. ubuntu18.0.4 不能下载 libgd2-dev(ubuntu 20.04 安装perl 中GD 模块失败的解决办法)
  5. 菜鸟车辆路径规划创造26项世界纪录 实际可降低10.3%配送成本
  6. 顺序存取和随机存取的区别_内存和硬盘的区别
  7. Redmi K40系统截图曝光:配备顶级2K屏幕+骁龙870移动平台
  8. MVC中modelstate的使用
  9. Python(2.7.6) 迭代器
  10. 定时监控服务,告警,并启动服务
  11. 使用Pspice进行电路仿真
  12. 淘宝开店之旅_我要充一充
  13. 『可道云』内网穿透牛刀小试,会敲键盘就能搭建的私有云网盘
  14. Fama三因子和Carhat 四因子的介绍和计算
  15. 数学英语不好可以学计算机么,数学不好,英语不行,非计算机专业,可以学IT吗?...
  16. 唇语识别技术的开源教程,听不见声音我也能知道你说什么!
  17. 计算机控制系统软件设计,计算机控制技术第7章 计算机控制系统软件设计.ppt
  18. 这200道java大厂面试题全部掌握,“面试”想去哪就去哪
  19. 发那科机器人有可能用到的系统变量总结(定期更新)
  20. 如何发现我所爱?如何做我所爱?

热门文章

  1. java虚拟机中的双亲委派机制
  2. php5.6之php-fpm优化
  3. M1卡破解(智能卡攻防技术分层、分级研究探讨)
  4. 面试阿里Android研发岗,已拿到offer,这些知识点该放出来了
  5. COBOL非常见知识点一
  6. 网站服务器速度变慢的原因,网站打开速度慢的原因,你知道吗?
  7. 论文分享:PowerTCP: Pushing the Performance Limits of Datacenter Networks
  8. python实现 发送图片到打印机 进行打印
  9. linux下mmap的使用
  10. 学习笔记TF010:softmax分类