C++ 小菜1:虚析构函数
来源:互联网 发布:云上贵州数据交换平台 编辑:程序博客网 时间:2024/05/22 17:19
什么是虚析构函数?
C++中的析构函数用于内存的回收和清理。当子类实例被回收时,析构函数执行顺序如下:
1. 子类析构函数
2. 父类析构函数
对于虚析构函数,简单地说,就是被声明为虚函数的析构函数。要定义一个虚析构函数,你只需要在析构函数头前加上关键字 “virtual”。
为什么我需要使用虚析构函数?
如果基类的析构函数不是虚函数,那么当 delete 一个被声明为基类但却被初始化为继承类(如声明为基类的指针,却指向了继承类)的实例,继承类的析构函数将不会被调用。具体事例如下:
- class Base
- {
- ~Derived()
- {
- // some virtual methods
- cout << “Destroying Base”<< endl;
- }
- };
- class Derived : public Base
- {
- ~Derived()
- {
- // Do some important cleanup
- cout << “Destroying Derived”;
- }
- }
- Base *b = new Derived();
- // use b
- delete b; // Here’s the problem!
输出结果如下:
Destroying Base
可以发现,继承类的析构函数并没有被执行。解决办法很简单,把Base Class的析构函数声明为虚函数即可,即修改为: virtual ~Derived() 。再次执行,输出结果如下:
Destroying Derived
Destroying Base
何时需要使用虚拟析构函数?
只要你的类中有虚函数,就要使用虚析构函数。因为通常基类中都会含有虚函数,这样做能保护你的代码的安全性。如果基类的析构函数为虚函数,那么其继承类的析构函数将被自动声明为虚函数,不用再显式(加 virtual )声明。
- C++ 小菜1:虚析构函数
- 小菜学C之递归
- 小菜学C之return
- 理解C语言——从小菜到大神的晋级之路(6)——函数与调用
- C++ 小菜2:拷贝构造函数
- 小菜学C之const理解
- 小菜的性能日记 1
- 理解C语言——从小菜到大神的晋级之路(13)——进一步讨论函数与指针
- 小菜第一篇。ax+by=c求解
- 一个刚学c语言的小菜鸡
- 理解C语言——从小菜到大神的晋级之路(1)——引言:C语言的前世今生
- 设计模式(1)装饰模式小菜扮靓
- HTML5小菜
- 小菜单
- Hello小菜
- 小菜关于c语言的一次认识!(本人新手,嘿嘿)
- C语言高手进阶的三碟小菜和一盘大餐
- C++-----虚析构函数
- 上机项目--求平均速度
- 简单队列实现
- D-BUS详解
- Linux学习笔记 之 mount命令
- Archlinux安装图形界面
- C++ 小菜1:虚析构函数
- 我无比憧憬的大学
- VMWare 3种网络模式
- 最小生成树之普里姆
- 通过自定义属性限制文本域长度
- 布局xml文件和模板phtml的对应关系
- vi 中将 Windows 文本文件中的 ^M (回车换行)全部替换掉
- Uboot 设置启动参数
- Difference between Comparator and Comparable in Java