C中的虚拟默认析构函数

我有一大组继承的类(标准),它从基类(标准)继承.这是标准的代码

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");
    };
};

既然我根本就没有这个析构函数,但是这应该是一个基类,我需要插入一个空的虚拟析构函数,即e.e.喜欢这个?:

virtual void ~criterion() = 0;

如果需要虚拟析构函数声明,那么所有中间类都需要一个呢?即fastFilter以上需要一个虚拟析构函数?

最佳答案
是的 – 基类需要一个虚拟析构函数,即使它是空的.如果没有这样做,那么当通过基本指针/引用删除一个派生对象时,派生对象的成员对象将不会有机会正确地破坏它们.

派生类不需要声明或定义自己的析构函数,除非它们需要除默认析构函数之外的其他事物.

转载注明原文:C中的虚拟默认析构函数 - 代码日志