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