Basta mettere virtuale il distruttore della classe base per accontentare il compilatore.
Nel caso specifico in esame il distruttore non deve effettuare un cleanup di risorse e nelle classi derivate può essere omesso.
Però se una classe derivata fosse costituita così (ad esempio):
Allora è imperativo che sia virtuale il distruttore della classe base o la memoria rimane allocata.codice://Eccezioni di dizionario vuoto class EmptyError : public Dizionario_Exception { public: EmptyError() { dato_privato = new char[MAXLEN]; } ~EmptyError() { delete[] dato_privato; } virtual void debug_print() const { std::cerr << "Dizionario vuoto."<<std::endl; } private: char* dato_privato. };
Per evitare problemi futuri meglio mettere sempre i distruttori virtuali.
E ricorda che il polimorfismo non funziona solo con i puntatori, ma anche con i reference.