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

 更新时间:2017年05月16日 14:39:38   投稿:lqh  
这篇文章主要介绍了C++的虚析构详解及实例代码的相关资料,需要的朋友可以参考下

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;
 }

}

这个时候在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。注意这里也可以看出调用顺序,先走父类的构造,然后子类的构造。先走子类的析构,最后走父类的析构。 

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

相关文章

  • C语言实现ATM机存取款系统

    C语言实现ATM机存取款系统

    这篇文章主要为大家详细介绍了C语言实现ATM机存取款系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • c++实现md5加密的代码

    c++实现md5加密的代码

    这篇文章主要介绍了c++实现md5加密的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C语言实现图书管理系统课程设计

    C语言实现图书管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现图书管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • VsCode搭建C语言运行环境详细过程及终端乱码问题解决方案

    VsCode搭建C语言运行环境详细过程及终端乱码问题解决方案

    这篇文章主要介绍了VsCode搭建C语言运行环境以及终端乱码问题解决,在VsCode中搭建C/C++运行环境需要先安装几个插件,具体插件文中给大家详细介绍,需要的朋友可以参考下
    2022-12-12
  • C语言 sizeof 函数详情

    C语言 sizeof 函数详情

    这篇文章主要介绍了C语言 sizeof 函数,在 C 语言中,char 字符串也是一种非常重要的数据类型,我们除了使用 sizeof 函数获取字符串长度之外,使用 sizeof 函数同样也可以完成字符串长度的获取,下面文章内容具体描述该内容,需要的朋友可以参考以下
    2021-10-10
  • 简单掌握Linux系统中fork()函数创建子进程的用法

    简单掌握Linux系统中fork()函数创建子进程的用法

    fork()函数只能在类Unix系统下使用,因为需要引入unistd头文件,这里我们就来简单掌握Linux系统中fork()函数创建子进程的用法,需要的朋友可以参考下
    2016-06-06
  • 简单聊聊C++中线程的原理与实现

    简单聊聊C++中线程的原理与实现

    C++11 引入了多线程支持,提供了一套基本的线程库,包括线程、互斥量(mutex)、条件变量(condition_variable)等。这些组件可以帮助你在 C++ 程序中实现并发和多线程编程,本文就来和大家简单聊聊吧
    2023-03-03
  • 详解如何利用C++实现Mystring类

    详解如何利用C++实现Mystring类

    这篇文章主要为大家详细介绍了C++实现MyString的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++归并法+快速排序实现链表排序的方法

    C++归并法+快速排序实现链表排序的方法

    这篇文章主要介绍了C++归并法+快速排序实现链表排序的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 有关C++头文件的包含顺序研究

    有关C++头文件的包含顺序研究

    下面小编就为大家带来一篇有关C++头文件的包含顺序研究。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01

最新评论