如果某个类不包含
虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个
虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。
抽象类是准备被用做基类的,基类必须要有一个虚析构函数,
纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个
纯虚析构函数。
这个类有一个
纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事:必须提供纯虚析构函数的定义:
这个定义是必需的,因为虚析构函数工作的方式是:最底层的派生类的析构函数最先被调用,然后各个
基类的析构函数被调用。这就是说,即使是
抽象类,
编译器也要产生对~awov的调用,所以要保证为它提供
函数体。如果不这么做,
链接器就会检测出来,最后还是得回去把它添上。