码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-10 22:09:33      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:...   col   定制   color   style   问题   对象   需要   条款07   

记住:
带多态性质的基类应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。
class的设计目的如果不是作为基类使用,或不是为了具备多态性,就不该声明virtual析构函数。

class TimeKeeper {
public:
    TimeKeeper();
    ~TimeKeeper();
    ...
};
class AtomicClock: public TimeKeeper { ... };
class WaterClock: public TimeKeeper { ... };

TimeKeeper* ptk = getTimeKeeper(); //获得一个指向derived class的对象指针
...
delete ptk;  //因为TimeKeeper带着一个非virtual的析构函数,所以derived class的析构函数不会被调用,导致资源泄露。

解决这个问题,只需要

class TimeKeeper {
public:
    TimeKeeper();
    virtual ~TimeKeeper();
    ...
};


virtual函数的目的是允许derived class的实现得以定制化。任何class只要带有virtual函数,都几乎确定应该也有一个virtual析构函数。
如果class不含virtual函数,通常表示它并不会被用作一个基类,所以其析构函数不需要为virtual。

使用pure virtual析构函数,你必须为这个pure virtual析构函数提供一份定义。

class AMOV {
public:
    virtual ~AMOV() = 0;
};
AMOV::~AMOV() {}

 














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

标签:...   col   定制   color   style   问题   对象   需要   条款07   

原文地址:https://www.cnblogs.com/pfsi/p/9164540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!