zoukankan      html  css  js  c++  java
  • jQuery火箭图标返回顶部代码

        我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。

    可是,为什么要这样做呢?下面用一个小例子来说明: 

      

     1 #include<iostream>
     2 using namespace std;
     3 class Base
     4 {
     5 public:
     6     Base() {}
     7     virtual ~Base();
     8 };
     9 
    10 class Subclass :public Base
    11 {
    12 public:
    13     Subclass() {}
    14     ~Subclass();
    15 };
    16 Base::~Base()
    17 {
    18     cout << "Base destructor is called." << endl;
    19 }
    20 
    21 Subclass::~Subclass()
    22 {
    23     cout << "Subclass destructor is called." << endl;
    24 }
    25 
    26 int main()
    27 {
    28     Base *b = new Subclass;
    29     delete b;
    30     return 0;
    31 }

    输出结果:   

    Subclass destructor is called.
    Base destructor is called.

    这个很简单,非常好理解。
    但是,如果把类Base析构函数前的virtual去掉,那输出结果就是下面的样子了:

    Base destructor is called.

    也就是说,类Base的析构函数根本没有被调用!一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内存泄漏。我想所有的C++程序员都知道这样的危险性。当然,如果在析构函数中做了其他工作的话,那你的所有努力也都是白费力气。
        所以,文章开头的那个问题的答案就是--这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。
        当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。

  • 相关阅读:
    Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)D. Frequency of String
    edu30F. Forbidden Indices
    QQ登录模拟GUI综合
    Thread与Runnable线程继承与实现
    windowsProgram系统强制隐藏解除代码
    最长公共上升子序列(LCIS问题)
    分层图学习笔记 & [JLOI2011]飞行路线题解
    Luogu P1441 砝码称重
    NOIP 2020 复习计划
    浅析BST二叉搜索树
  • 原文地址:https://www.cnblogs.com/Trojan00/p/8907736.html
Copyright © 2011-2022 走看看