У меня есть большой набор унаследованных классов (критериев), которые наследуются от базового класса (критерий). Здесь criterion code
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");
    };
};
Так как у меня вообще нет деструктора, но все же это должен быть базовый класс, мне нужно вставить пустой виртуальный деструктор, I.e. как это?:
virtual void ~criterion() = 0;
Если требуется объявление виртуального деструктора, нужны ли все промежуточные классы? То есть для fastFilter выше нужен виртуальный деструктор?
