zoukankan      html  css  js  c++  java
  • C++复习13.虚析构函数知识

    C++ 虚析构函数 20131010

             在C++中的虚函数作用是实现基于继承机制的多态,但是我们好像忽略了一种情况,就是虚析构函数。在C++继承机制中,虽然构造函数是不可以使用虚函数声明,但是析构函数是可以声明为虚函数的。这样做的目的是为了当父类指针指向一个派生类的对象的时候,当删除该指针的时候,可以调用派生类的析构函数,释放资源。如果不是这样的话,那么在C++中的派生类的内存空间是不会被释放掉,会造成内存的浪费,最终导致内存溢出而是程序崩溃。

             但是我们不能够随意的使用虚函数声明,因为会增加类的存储空间,当我们声明一个函数式虚函数的时候,编译器会生成一个虚表中的函数指针,这样的话,如果 没有必要使用虚函数而使用了虚函数的话,会造成资源的浪费。

             一个例子:

    #include <iostream>

    using namespace std;

     

    class Base{

    public:

        Base(){

            cout << "Base::constructor" << endl;

        }

        virtual ~Base(){

            cout << "Base::~Base()" << endl;

        }

    };

    class Derived:public Base{

    public:

        Derived(){

            cout << "Derive::Constructor" << endl;

        }

        ~Derived(){

            cout << "Derived::~Derived()" << endl;

        }

    };

    int main()

    {

        Base * pBase = new Derived();

        delete pBase;

        return 0;

    }

    这样才会争取的调去析构函数,而且是调用两个析构函数。

    Base::constructor

    Derive::Constructor

    Derived::~Derived()

    Base::~Base()

    但是如果不适用虚函数的话,那么就会造成值会调用父类的析构函数,就结束了。

     

  • 相关阅读:
    TIME_WAIT
    Oracle常用SQL命令
    Linux系统标准化设置:克隆系统后网卡设置、固定IP设置、关闭防火墙和SELINUX、更改主机名
    Linux平台oracle 11g单实例 + ASM存储 安装部署
    Oracle基础维护03-主机、数据库日志收集
    print控制台输出带颜色文字方法
    第二十九节,装饰器
    python 浅析对return的理解
    工欲善其事,必先利其器——持续更新中……
    优秀的学习资源收集:
  • 原文地址:https://www.cnblogs.com/hbhzsysutengfei/p/3409469.html
Copyright © 2011-2022 走看看