Destructeur virtuel manquant pour la classe de base dans le polymorphism = Fuite de ressources?

Nous soaps qu’il est nécessaire de spécifier le destructeur d’une classe de base comme virtuel si vous avez l’intention de l’utiliser de manière polymorphe, sinon vous pourriez avoir une fuite de ressource dans votre programme, car seul le destructeur de la classe de base sera appelé et non le destructeur d’object dérivé .

Nous soaps également que les constructeurs / destructeurs sont uniquement des constructions d’initialisation / uninitialisation, et l’opérateur new / operator delete gère l’allocation / l’unallocation de la mémoire.

Dans ce cas, pourquoi l’absence d’appels de destructeurs entraîne-t-elle une fuite, dans le cas où ma classe C ++ ne contient que des données membres primitives? Serait-il plus exact de dire que l’opérateur delete ne peut pas annuler l’allocation de la mémoire, et c’est ce qui crée une fuite de ressources?

EDIT: Ajout d’un exemple, pour clarifier ma question. Dans le cas suivant, le destructeur dérivé n’est jamais appelé. Cela signifie-t-il que la mémoire de la firebase database dérivées n’est jamais allouée? Dans ce cas, est-ce parce que le destructeur ne peut pas être appelé ou parce que l’opérateur delete ne peut pas annuler l’allocation de la mémoire pour l’int?

class Base { int baseInt; public: Base(){}; ~Base(){}; }; class Derived : public Base { int derivedInt; public: Derived(){}; ~Derived(){}; }; int main(int argc, const char * argv[]) { Base *pb = new Derived(); delete pb; return 0; } 

La suppression d’un object via un pointeur vers la base appelle un comportement indéfini, sauf si le destructeur de la classe de base est virtuel. La source

Cela signifie que tout peut arriver, y compris une fuite de mémoire.