C++ · Intermediário · Português · Técnico
destrutor virtual
Destrutor declarado virtual na classe base, para que destruir um objeto derivado por um ponteiro para a base chame também o destrutor da derivada.
Onde usar
Obrigatório em classes feitas para serem herdadas e apagadas por ponteiro da base, como interfaces. Sem ele, o delete pela base é comportamento indefinido e vaza os recursos da derivada.
Em código
struct Base {
virtual ~Base() = default;
};
struct Der : Base {
~Der() override { puts("der"); }
};
Base* p = new Der;
delete p; // chama ~Der e depois ~BaseExemplos
Falta um destrutor virtual nessa interface, isso vai vazar.
Marquei o destrutor da base como virtual = default.
Cuidado
Não é preciso em classes que nunca serão apagadas pela base; nelas, um destrutor protegido e não virtual basta.