虚析构函数

虚析构函数
在什么时候需要将基类析构函数设置成虚函数呢

虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。
如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用(这个我有这种说法吗?。。)。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。
所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。

#include<iostream>
using namespace std;

class CBird
{
public:
    CBird() { cout << "CBird constructor." << endl; };
    //当基类
    virtual ~CBird() { cout << "CBird destructor." << endl; };
    virtual void fly() { cout << "CBird fly." << endl; };
};

class CLark : public CBird
{
public:
    CLark() { cout << "CLark constructor." << endl; };
    ~CLark() { cout << "CLark destructor." << endl; };
    void fly() { cout << "CLark fly." << endl; }
};

int main()
{
    CBird * pBird = new CLark();
    pBird->fly();
    delete pBird;
    getchar();
    return 0;
}

 

posted @ 2015-04-02 15:21  zzyoucan  阅读(149)  评论(0编辑  收藏  举报