代码改变世界

纯虚析构函数

2010-12-16 00:12  Rollen Holt  阅读(507)  评论(0编辑  收藏  举报

在某些类里声明纯虚析构函数很方便。
纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。
有些时候,你想使一个类成为抽象类,但刚好又没 有任何纯虚函数。怎么办?
因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声 明一个纯虚析构函数。   
这里是一个例子:  
class awov { 
public:  
virtual ~awov() = 0; // 声明一个纯虚析构函数  
};   
这个类有一个纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。
但这里还有一件事:必须提供纯虚析构函数的定义:  
awov::~awov() {} // 纯虚析构函数的定义  

这个定义是必需的,因为虚析构函数工作的方式是:最底层的派生类的析构函数最先被调用,然后各 个基类的析构函数被调用。这就是说,即使是抽象类,编译器也要产生对~awov的调用,所以要保证为它提供函数体。如果不这么做,链接器就会检测出来,最 后还是得回去把它添上。