Avatar ·

Quando usar destrutores virtuais em C++ e o que acontece se não os declarar?

Olá a todos! Comecei a estudar C++ e não consigo entender uma coisa. Veja só: Eu tenho uma classe base `Base` e uma classe derivada `Derived`. Em `Derived`, aloco memória no heap. Quando crio um objeto através de um ponteiro para a classe base e depois o deleto com `delete`, apenas o destrutor de `Base` é chamado, e o destrutor de `Derived` não. Isso causa um memory leak, porque a memória alocada na classe derivada não é liberada. Sei que preciso adicionar `virtual` antes do destrutor na classe base, e então tudo funciona. Mas por que isso acontece? Afinal, eu escrevi explicitamente o código que deveria chamar o destrutor da classe derivada? Ou estou confundindo algo? Aqui está um exemplo de código que não funciona (ou melhor, funciona, mas com vazamento de memória): ```cpp class Base { public: ~Base() { std::cout << "Base destructor\n"; } }; class Derived : public Base { private: int* data; public: Derived() { data = new int[100]; } ~Derived() { delete[] data; std::cou