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

     

     

     

     

  • 相关阅读:
    概率的定义
    二项式分布与伯努利分布
    复数的表示方法
    <诗经>的由来
    王国维
    应该记住的历史事件
    switch条件变量的取值类型
    & 和 && 区别和联系,| 和 || 区别和联系
    成功安装 Visio 2016 和 Office 2016 的64位版本~~
    删除MicrosoftOffice2016的扫尾工作
  • 原文地址:https://www.cnblogs.com/SkyFireITDIY/p/4376074.html
Copyright © 2011-2022 走看看