灵感来源:C++——我们为什么要在类定义之外定义纯虚析构函数?
下面的代码实际上做了什么?
class Object
{
public:
virtual ~Object() = 0;
};
Object::~Object() { /*...*/ }
我认为纯虚函数的意义在于强制子类实现该特定功能。如果是这样,那为什么还要在虚拟基类中实现相同的功能呢?
灵感来源:C++——我们为什么要在类定义之外定义纯虚析构函数?
下面的代码实际上做了什么?
class Object
{
public:
virtual ~Object() = 0;
};
Object::~Object() { /*...*/ }
我认为纯虚函数的意义在于强制子类实现该特定功能。如果是这样,那为什么还要在虚拟基类中实现相同的功能呢?
此代码阻止您创建 Object 的实例,同时允许您创建子类。
销毁对象时,会调用父类的析构函数,所以它必须存在。这适用于析构函数是否是纯虚拟的。纯虚成员函数只有在显式调用时才需要定义,Foo:theFunc()
.
在纯虚析构函数的情况下,没有办法“强制”任何人在派生类中实现它。编译器会为你写一个。此外,编译器编写的析构函数(在派生类中)将调用父析构函数——所以你最好为父类编写一个实现。
所以,总结一下: