`
gaofen100
  • 浏览: 1191118 次
文章分类
社区版块
存档分类
最新评论

虚析构函数之实践

 
阅读更多

看了不少虚函数方面的文章,但对于虚析构函数在功能实现上还是不甚理解,于是决定实践一番,可让我收益匪浅啊

首先定义一个没有虚函数的基类:

在main()函数下测试

运行结果如下:

当基类中需要在派生类中重写(override)的函数没有声明为虚函数时(声明前加virtual),由基类类型定义的派生类对象没有调用与派生类相应的成员函数和析构函数。而是直接调用了基类的成员函数和析构函数。这当然不是我们所要的。

修改后的基类和派生类如下(添加了虚函数机制):

在main()函数下测试,结果如下图:

当对基类的成员函数和析构函数声明为虚函数时,是根据对象的实际类型来确定要执行的函数的。需要注意的是,当调用了派生类的析构函数时,自动调用了基类的析构函数。而基类的析构函数不为虚函数时,则有可能造成内存泄露。

分享到:
评论

相关推荐

    C++技术培训.doc

    C++程序设计专题讲座 3 1 第一部分 3 1.1 sizeof 3 1.2 宏 4 1.3 隐式类型转换 5 1.4 常量串 7 1.5 函数指针 8 1.6 递归 8 1.7 Const 9 ...2.5.4 虚析构函数 47 2.5.5 隐藏数据成员 49 2.5.6 单实例对象 54

    动物运动会 c++

    动物运动会实验报告 目的: 1. 掌握“指针”的概念,理解链表的结构特点; 2. 掌握动态空间的使用,熟练包含指针成员的类的实现; 3. 实践OOP中的继承性及多态性并体会其优点 要求: ... 析构函数。

    C++ Primer第四版【中文高清扫描版】.pdf

    15.4.4 虚析构函数 495 15.4.5 构造函数和析构函数中的虚函数 497 15.5 继承情况下的类作用域 497 15.5.1 名字查找在编译时发生 498 15.5.2 名字冲突与继承 498 15.5.3 作用域与成员函数 499 15.5.4 虚函数与作用域 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    1.5 关于C++上机实践 习题 第2章 数据类型与表达式 2.1 C++的数据类型 2.2 常量 2.2.1 什么是常量 2.2.2 数值常量 2.2.3 字符常量 2.2.4 符号常量 2.3 变量 2.3.1 什么是变量 2.3.2 变量名规则 2.3.3 定义变量 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    1.5 关于C++上机实践 习题 第2章 数据类型与表达式 2.1 C++的数据类型 2.2 常量 2.2.1 什么是常量 2.2.2 数值常量 2.2.3 字符常量 2.2.4 符号常量 2.3 变量 2.3.1 什么是变量 2.3.2 变量名规则 2.3.3 定义变量 ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    9.6.7 虚析构函数 476 9.7 类类型之间的强制转换 481 9.8 嵌套类 482 9.9 C++/CLI编程 485 9.9.1 C++/CLI类的继承 486 9.9.2 接口类 492 9.9.3 定义接口类 492 9.9.4 类和程序集 496 9.9.5 被指定...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     15.7.1 虚析构函数 552  15.7.2 合成拷贝控制与继承 552  15.7.3 派生类的拷贝控制成员 554  15.7.4 继承的构造函数 557  15.8 容器与继承 558  15.8.1 编写Basket类 559  15.9 文本查询程序再探 562  ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     15.7.1 虚析构函数 552  15.7.2 合成拷贝控制与继承 552  15.7.3 派生类的拷贝控制成员 554  15.7.4 继承的构造函数 557  15.8 容器与继承 558  15.8.1 编写Basket类 559  15.9 文本查询程序再探 562  ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    8.1.3 析构函数与动态内存分配 366 8.2 实现复制构造函数 369 8.3 在变量之间共享内存 370 8.3.1 定义联合 371 8.3.2 匿名联合 372 8.3.3 类和结构中的联合 372 8.4 运算符重载 373 8.4.1 实现重载的运算符 ...

    传智播客扫地僧视频讲义源码

    18_虚析构函数 19_重载重写重定义_问题抛出 20_重载重写重定义_概念分析_传智扫地僧 21_重载重写重定义_课堂答疑_传智扫地僧 文档和源码 01_上一次课程回顾 02_多态原理探究_传智扫地僧 03_证明vptr指针的存在 04_...

    Linux多线程服务端编程:使用muduo C++网络库

    1.1当析构函数遇到多线程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3 1.1.1线程安全的定义. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4 1.1.2MutexLock 与MutexLockGuard. . . . . . ....

Global site tag (gtag.js) - Google Analytics