【发布时间】:2016-11-14 12:24:07
【问题描述】:
使类抽象是通过使其成员函数之一成为纯虚函数。
使类抽象强制该类的子类实现基本纯虚函数。
我们甚至可以将基类析构函数变成纯的,这足以成为抽象类。
问题:
为什么我们没有义务在派生类中实现纯虚基的析构函数?
是不是说只要C++默认给我们增加了四个成员函数:构造函数、复制构造函数、赋值和析构函数就不需要在我们的派生类中实现了吗?
例如:
#include <iostream>
using namespace std;
class Base
{
public:
Base(){cout << "Base Ctor" << endl;}
virtual ~Base() = 0 {cout << "Virtual base dtor" << endl; }
};
class Derived : public Base
{
public:
Derived(){cout << "Derived Ctor" << endl;}
// virtual ~Derived() {cout << "Virtual Derived dtor" << endl; }
};
int main()
{
Base* theBase = new Derived;
delete theBase;
cout << endl;
cout << endl << endl;
return 0;
}
- 我知道如果它是动态分配的,我应该添加子析构函数来释放内存。
【问题讨论】:
-
嗯,本质上是因为为派生类自动生成了一个析构函数。然而,通过创建一个纯虚析构函数,你的类变成抽象的并且不可能创建该类型的对象(例如,
new Base;不会编译)。
标签: c++ oop pure-virtual virtual-destructor