Sobes.tech
Junior — Middle

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.