zoukankan      html  css  js  c++  java
  • EC笔记,第二部分:7.为多态基类声明虚析构函数

    7.为多态基类声明虚析构函数

    1.为多态基类声明虚析构函数

    code1:

    class A{

    public:

        int* a;

        A():a(new int(5))

        {}

        ~A(){

           delete a;

        }

    };

     

    class B:public A

    {

    public:

        int *b;

        B():b(new int(10))

        {}

        ~B(){

           delete b;

        }

    };

     

    int main(int argc, char const *argv[])

    {

        B *bb=new B;

        A* aa=bb;

        delete aa;//bb中的部分内存泄漏

        return 0;

    }

     

     

    code2:

    class A{

    public:

        int* a;

        A():a(new int(5))

        {}

        virtual ~A(){//声明为虚析构函数

           delete a;

        }

    };

     

    class B:public A

    {

    public:

        int *b;

        B():b(new int(10))

        {}

        ~B(){

           delete b;

        }

    };

     

    int main(int argc, char const *argv[])

    {

        B *bb=new B;

        A* aa=bb;

        delete aa;//OK

        return 0;

    }

     

                纯虚析构函数需要有定义,因为虚析构函数层层调用,如果最底层没有定义,那么链接会失败

    2.为何不把虚构函数全部声明为虚析构函数?

                会使用更多内存,馊主意

    3.任何class中只要有virtrual函数,就差不多应该声明一个虚析构函数

     

    总结:

    clip_image001

     

     

     

     

  • 相关阅读:
    后台获取不规则排列RadioButton组的值
    通过使用ScriptManager.RegisterStartupScript,呈现后台多次使用alert方法
    通过获取DNS解析的未转义主机名,区分测试环境和正式环境代码
    Autolayout自动布局
    JSON和XML
    物理引擎UIDynamic
    呈现样式UIModalPresentation
    多线程 GCD
    FMDB数据库框架
    SQLite编码
  • 原文地址:https://www.cnblogs.com/SkyFireITDIY/p/4376074.html
Copyright © 2011-2022 走看看