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
No answers yet.
Faça login para deixar uma resposta