ExpertiDict

C++ · Intermediário · Português · Técnico

destrutor virtual

desˈtɾutoɾ viɾˈtwawsubstantivo

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 ~Base

Exemplos

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.

Veja também

Todos os termos de C++