【发布时间】:2010-10-24 01:18:27
【问题描述】:
我有大量继承自基类(标准)的继承类(标准)。这是criterion的代码
class criterion
{
public:
virtual unsigned __int32 getPriorityClass() const = 0;
virtual BOOL include(fileData &file) const = 0;
virtual void reorderTree() = 0;
virtual unsigned int directoryCheck(const std::wstring& directory) const = 0;
virtual std::wstring debugTree() const = 0;
};
这个派生类的一些例子:
class fastFilter : public criterion
{
public:
void reorderTree() {};
unsigned int directoryCheck(const std::wstring& /*directory*/) const { return DIRECTORY_DONTCARE; };
unsigned __int32 getPriorityClass() const { return PRIORITY_FAST_FILTER; };
};
class isArchive : public fastFilter
{
public:
BOOL include(fileData &file) const
{
return file.getArchive();
}
std::wstring debugTree() const
{
return std::wstring(L"+ ISARCHIVE\n");
};
};
由于我这里根本没有析构函数,但这应该是一个基类,我是否需要插入一个空的虚拟析构函数,即像这样?:
virtual void ~criterion() = 0;
如果需要虚拟析构函数声明,是否所有中间类也都需要一个? IE。上面的 fastFilter 是否也需要一个虚拟析构函数?
【问题讨论】:
-
上面不是空的析构函数。它是一个析构函数,也是一个纯虚函数。这与为空无关,事实上析构函数的特殊之处在于它必须始终有一个定义,即使它是纯虚拟的。