3

灵感来源:C++——我们为什么要在类定义之外定义纯虚析构函数?

下面的代码实际上做了什么?

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

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

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

4

2 回答 2

10

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

销毁对象时,会调用父类的析构函数,所以它必须存在。这适用于析构函数是否是纯虚拟的。纯虚成员函数只有在显式调用时才需要定义,Foo:theFunc().

于 2011-03-10T17:47:56.397 回答
2

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

所以,总结一下:

  1. 不是析构函数的纯虚函数不需要实现,因为您不希望程序员调用它。
  2. 纯虚析构函数必须有一个实现,因为编译器必须从子类中的析构函数(程序员和编译器都编写)调用它。
于 2011-03-10T19:27:17.083 回答