Avatar ·

Quand utiliser les destructeurs virtuels en C++ et que se passe-t-il si on ne les déclare pas ?

Bonjour à tous ! Je viens de commencer à étudier le C++ et je n'arrive pas à comprendre une chose. Regardez : J'ai une classe de base `Base` et une classe héritée `Derived`. Dans `Derived`, j'alloue de la mémoire sur le tas. Quand je crée un objet via un pointeur vers la classe de base et que je le supprime ensuite avec `delete`, seul le destructeur de `Base` est appelé, mais pas celui de `Derived`. Cela entraîne une fuite de mémoire, car la mémoire allouée dans la classe dérivée n'est pas libérée. Je sais qu'il faut ajouter `virtual` devant le destructeur dans la classe de base, et alors tout fonctionne. Mais pourquoi cela se produit-il ? Pourtant, j'ai explicitement écrit le code qui devrait appeler le destructeur de la classe dérivée ? Ou est-ce que je confonds quelque chose ? Voici un exemple de code qui ne fonctionne pas chez moi (enfin, il fonctionne, mais avec une fuite) : ```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