zoukankan      html  css  js  c++  java
  • C++中虚析构函数的作用

    本文参考来源:http://blog.csdn.net/starlee/article/details/619827

    在C++开发的时候,用来做基类的类的析构函数一般都是虚函数这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

    代码示例如下:

    class ClxBase
    {
    public:
        ClxBase() {};
        virtual ~ClxBase() {cout<<"Output from the destructor of class ClxBase."<<endl;};
        virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl; };
    };
    
    class ClxDerived : public ClxBase
    {
    public:
        ClxDerived() {};
        ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; }; 
        void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };
    };
    int main()
     {
         ClxBase *p=new ClxDerived;            //定义一个指向派生类对象的基类指针
         p->DoSomething();
         delete p;                            //删除指针
         system("pause");
         return 0;
    }

    该代码的执行结果如下:

    当把基类析构函数前面的virtual去掉之后,得到的结果如下:

    Do something in class ClxDerived!                //此时派生类的析构函数没有执行
    Output from the destructor of class ClxBase

    一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内存泄漏。当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。

  • 相关阅读:
    pat甲级1004 Counting Leaves
    pat甲级1003 Emergency
    pat甲级1002 A+B for Polynomials
    pat甲级1001 A+B Format
    【转载】sql注入之入门
    JavaScript基础学习笔记
    django 安装
    python web编程CGI
    python urllib库
    python数据库编程
  • 原文地址:https://www.cnblogs.com/runningRain/p/6028224.html
Copyright © 2011-2022 走看看