• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++的虚析构详解及实例代码

C++的虚析构详解及实例代码

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++编程实例详解,c++编程实例详解pdf,c++关键字详解,c++指针详解,c++socket编程详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

C++的虚析构

  最近准备复习一遍所有的知识点,先从基础开始做起,用几分钟写个继承和析构吧。

  父类为A,子类为B,代码如下:

class A
{
 public:
 A()
 {
   cout << "构造A"<< endl; 
 }
 ~A()
 {
  cout << "析构A" << endl;
  }
}
class B:public A
{
 public:
 B()
 {
 cout << "构造B"<< endl; 
 }
 ~B()
 {
 cout << "析构B"<< endl;
 }

}
</div>

这个时候在main函数里,

定义一个A的对象,A a;运行输出结果为:构造A 析构A。

定义一个B的对象, B b;运行的输出结果为:构造B 析构B。

定义一个A的指针,指向B。A *P = new b; 运行输出结果为:构造A 构造B.这个时候很多人就容易出问题了,为啥没调用析构呢,这个也是经常遇到的问题,最简单也是最容易遗忘的。new出来的对象没有删,还有写一行代码 delete p;这个时候的运行输出结果为:构造A 构造B 析构A。又出现问题了,B的析构怎么没走,这个时候需要一用虚析构这个概念,虚析构的功能:父类的析构写成虚析构,在删除父类的指针的时候,可以删除子类的对象,避免内存泄漏。

具体操作就是把上面代码的第八行,前面加一个virtual。这个时候再运行输出结果为:构造A 构造B 析构B 析构A。注意这里也可以看出调用顺序,先走父类的构造,然后子类的构造。先走子类的析构,最后走父类的析构。 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++的虚析构详解及实例代码
  • C++二分查找(折半查找)算法实例详解
  • C++ 中函数重载、覆盖与隐藏详解
  • C++调用Python基础功能实例详解
  • C++中函数重载实例详解
  • C++模版函数详解
  • 详解C++11中的右值引用与移动语义
  • C++详解默认参数的构造函数及简单实例代码
  • C++如何动态的生成对象详解
  • C++ 反射机制详解及实例代码

相关文章

  • 2017-05-28C++ 中try finally关键字详解
  • 2017-05-28C++入门概览和尝试创建第一个C++程序
  • 2017-05-28C++实现简单的图书管理系统
  • 2017-05-28C++中声明类的class与声明结构体的struct关键字详解
  • 2017-05-28浅谈带缓冲I/O 和不带缓冲I/O的区别与联系
  • 2017-05-28C语言使用stdlib.h库函数的二分查找和快速排序的实现代码
  • 2017-09-13C++内存分配的方式
  • 2017-05-28全局静态存储区、堆区和栈区深入剖析
  • 2017-05-28C语言安全编码之数组索引位的合法范围
  • 2017-05-28VC创建圆角dialog的实现方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
    • 如何用矩形法(梯形法)求定积分
    • C++实现N个骰子的点数算法
    • Mac OS上搭建Apache+PHP+MySQL开发环境的详细教程
    • 基于C语言sprintf函数的深入理解
    • C语言/C++如何生成随机数
    • VC6.0如何创建以及调用动态链接库实例详解
    • C++ COM编程之接口背后的虚函数表
    • 显示内存状态示例分享
    • 浅析成员函数和常成员函数的调用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有