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++程序员都知道这样的危险性。当然,如果在析构函数中做了其他工作的话,那你的所有努力也都是白费力气。
        所以,文章开头的那个问题的答案就是--这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。
        当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。

  • 相关阅读:
    [算法整理]树上求LCA算法合集
    线段树专题测试2017.1.21
    [数据结构]替罪羊树简介
    图论测试 2017.1.17
    bzoj 2038 A-小Z的袜子[hose]
    洛谷比赛『期末考后的休闲比赛2』
    [题解]bzoj 1861 Book 书架
    bzoj 3223 文艺平衡树
    Splay简介
    python2.7 一个莫名其妙的错误
  • 原文地址:https://www.cnblogs.com/Trojan00/p/8907736.html
Copyright © 2011-2022 走看看