灵感来自:C++ -- why should we define the pure virtual destructor outside the class definition?
以下代码实际上做了什么?
class Object
{
public:
virtual ~Object() = 0;
};
Object::~Object() { /*...*/ }
我认为纯虚函数的意义在于强制子类实现该特定函数。如果是这种情况,那么为什么还要在虚拟基类中实现相同的功能?
答案 0 :(得分:10)
此代码阻止您创建Object实例,同时允许您创建子类。
当销毁对象时,将调用父类的析构函数,因此它必须存在。无论析构函数是纯虚函数还是非虚函数,这都适用。只有在明确调用Foo:theFunc()
时才需要定义纯虚拟成员函数。
答案 1 :(得分:2)
在纯虚析构函数的情况下,没有办法“强迫”任何人在派生类中实现它。编译器会为您编写一个。另外,编译器编写的析构函数(在派生类中)将调用父析构函数 - 所以你最好为父编写一个实现。
所以,总结一下: