《Effective C++》学习笔记条款07 为多态基类声明virtual析构函数

十年热恋 提交于 2019-12-07 07:24:42


条款07:为多态基类声明virtual析构函数
    


        当基类的指针指向派生类的对象的时候,当我们使用完,对其调用delete的时候,其结果将是未有定义——基类

成分通常会被销毁,而派生类的充分可能还留在堆里。这可是形成资源泄漏、败坏之数据结构、在调试器上消费许多

时间。
   
 

        消除以上问题的做法很简单:给基类一个virtual析构函数。此后删除派生类对象就会如你想要的那般。
    

        任何类只要带有virtual函数都几乎确定应该也有一个virtual析构函数。
       

        如果一个类不含virtual函数,通常表示它并不意图被用做一个基类,当类不企图被当做基类的时候,令其析构函

数为virtual往往是个馊主意。因为实现virtual函数,需要额外的开销(指向虚函数表的指针vptr)。

     

         STL容器都不带virtual析构函数,所以最好别派生它们。

       

       请记住:

       (1) 带有多态性质的基类应该声明一个virtual析构函数。如果一个类带有任何virtual函数,它就应该拥个virtual函数。

       (2) 一个类的设计目的不是作为基类使用,或不是为了具备多态性,就不该声明virtual析构函数。  

 

                                                                                              2013.11.28  下午


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!