zoukankan      html  css  js  c++  java
  • 虚函数、纯虚函数、虚函数表、虚析构函数(三)

    上一篇说到了virtual关键字的使用范围以及虚函数。

    先上一段代码:

     1 #include "pch.h"
     2 #include <iostream>
     3 using namespace std;
     4 
     5 class Father {
     6 public:
     7     Father() {
     8         cout << "我是父类的构造函数" << endl;
     9     }
    10     ~Father() {
    11         cout << "~我是父类的析构函数" << endl;
    12     }
    13 };
    14 class Child1 : public Father {
    15 public:
    16     Child1() {
    17         cout << "我是子类1的构造函数" << endl;
    18     }
    19     ~Child1() { 
    20         cout << "我是子类1的析构函数" << endl;
    21     }
    22 };
    23 
    24 
    25 int main()
    26 {
    27     Father *fa = new Child1();
    28     delete fa;
    29 }

    输出是:

    我是父类的构造函数
    我是子类1的构造函数
    ~我是父类的析构函数

    可见子类的析构函数并未被调用,因为delete掉的是指向父类的指针,子类的对象还是仍然存在,这是很危险的,子类的那一片内存空间并未被释放。

    想要同时调用子类的析构函数,我们需要将父类的析构函数设置成为虚析构函数

  • 相关阅读:
    串口调试助手
    自己动手编写俄罗斯方块
    ASP.NET Core log4net
    ASP.NET Core读取配置文件
    ASP.NETCore3 MVC
    ASP.NETCore2C#7.0新语法
    ASP.NETCore1C#6.0新语法
    C#加密解密
    前端通用的滚动条样式
    C# 106 短信发送
  • 原文地址:https://www.cnblogs.com/leoncumt/p/10491814.html
Copyright © 2011-2022 走看看