为纯虚析构函数添加定义的目的是什么?

时间:2011-03-10 17:46:10

标签: c++ destructor pure-virtual

灵感来自:C++ -- why should we define the pure virtual destructor outside the class definition?

以下代码实际上做了什么?

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

Object::~Object() { /*...*/ }

我认为纯虚函数的意义在于强制子类实现该特定函数。如果是这种情况,那么为什么还要在虚拟基类中实现相同的功能?

2 个答案:

答案 0 :(得分:10)

此代码阻止您创建Object实例,同时允许您创建子类。

当销毁对象时,将调用父类的析构函数,因此它必须存在。无论析构函数是纯虚函数还是非虚函数,这都适用。只有在明确调用Foo:theFunc()时才需要定义纯虚拟成员函数

答案 1 :(得分:2)

在纯虚析构函数的情况下,没有办法“强迫”任何人在派生类中实现它。编译器会为您编写一个。另外,编译器编写的析构函数(在派生类中)将调用父析构函数 - 所以你最好为父编写一个实现。

所以,总结一下:

  1. 不是析构函数的纯虚函数不需要实现,因为您不希望程序员调用它。
  2. 纯虚析构函数必须具有实现,因为编译器必须在子类中从析构函数(程序员和编译器编写)中调用它。