Suppression d’un object dérivé via un pointeur sur sa classe de base

J’ai deux classes, base_class et Derive_class et le code suivant:

base_class *ptr = new derived_class; delete ptr; 

Ce code produira-t-il une fuite de mémoire? Si oui, comment devrais-je m’en occuper?

L’object que vous supprimez ne fuira pas, son bloc de mémoire sera libéré.

Si vous n’avez pas déclaré le destructeur de base_class virtuel, des objects dynamicment alloués contenus dans la derived_class s’appuieront sur le destructeur de la derived_class appelé pour les libérer. En effet, si le destructeur n’est pas virtuel, le destructeur derived_class la derived_class n’est pas appelé dans ce cas. Cela signifie également que les destructeurs des “objects incorporés” au sein de la derived_class ne seront pas automatiquement appelés, un problème distinct mais supplémentaire pouvant entraîner des fuites supplémentaires et la non-exécution d’un code de nettoyage essentiel.

En bref, déclarez que le destructeur de base_class est virtuel et vous pouvez utiliser en toute sécurité la technique que vous avez présentée.

Pour un exemple codé, voir:

Dans quel genre de situation, c ++ destructor ne sera pas appelé?