Ho una vasta serie di classi ereditate (criteri) che ereditano da una classe base (criterio). Ecco il codice criterion
'sVirtual Default Destructors in 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;
};
Alcuni esempi di classi derivate da questo:
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");
};
};
Dato che non ho un distruttore qui a tutti, ma tuttavia questa dovrebbe essere una classe base , ho bisogno di inserire un distruttore virtuale vuoto, IE come questo ?:
virtual void ~criterion() = 0;
Se è necessaria la dichiarazione del distruttore virtuale, anche tutte le classi intermedie ne hanno bisogno? Cioè fastFilter di cui sopra ha bisogno anche di un distruttore virtuale?
Quanto sopra non è un distruttore vuoto. È un distruttore che è anche una pura funzione virtuale. Questo non ha nulla a che fare con l'essere vuoti, e infatti il distruttore è speciale in quanto deve sempre avere una definizione anche quando è puro virtuale. –