Qual é o propósito do destruidor virtual na programação orientada a objetos?
sobes.tech IA
Resposta da IA
O destrutor virtual na programação orientada a objetos em C++ é usado para liberar corretamente os recursos ao remover objetos através de um ponteiro para a classe base.
Se a classe base tiver funções virtuais e o destrutor não for declarado virtual, ao remover um objeto de uma classe derivada por meio de um ponteiro para a classe base, apenas o destrutor da classe base será chamado. Isso pode levar a vazamentos de memória ou outros erros, pois o destrutor da classe derivada não será chamado.
Declarando o destrutor da classe base como virtual, garantimos que ao remover um objeto por meio de um ponteiro para a base, os destrutores de todos os níveis da hierarquia serão chamados, começando pela classe derivada e terminando na classe base.
Exemplo:
class Base {
public:
virtual ~Base() { /* limpeza de recursos base */ }
};
class Derived : public Base {
public:
~Derived() override { /* limpeza de recursos de Derived */ }
};
Base* obj = new Derived();
delete obj; // chamará ~Derived() e depois ~Base()
Sem um destrutor virtual em Base, apenas ~Base() seria chamado, o que está incorreto.