Tengo un gran conjunto de clases heredadas (criterios) que heredan de una clase base (criterio). Aquí está el código criterion
'sVirtual Default Destructors en 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;
};
Algunos ejemplos de las clases derivadas de éste:
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");
};
};
Dado que no tengo un destructor aquí en absoluto, pero esto aún no se supone que es una clase base , ¿necesito insertar un destructor virtual vacío, es decir como este ?:
virtual void ~criterion() = 0;
Si se necesita esa declaración de destructor virtual, ¿todas las clases intermedias también necesitan una? Es decir. ¿FastFilter arriba también necesitaría un destructor virtual?
Lo anterior no es un destructor vacío. Es un destructor que también es una función virtual pura. Esto no tiene nada que ver con estar vacío, y de hecho el destructor es especial, ya que siempre debe tener una definición incluso cuando es puramente virtual. –