J'ai un class A
qui utilise une allocation de mémoire de tas pour l'un de ses champs. La classe A est instanciée et stockée en tant que champ de pointeur dans une autre classe ( class B
.
Quand j'en ai fini avec un objet de classe B, j'appelle delete
, ce que je suppose appelle le destructeur ... Mais cela appelle-t-il aussi le destructeur de classe A?
Éditer:
D'après les réponses, je prends cela (veuillez modifier si incorrect):
delete
d'une instance de B appelle B :: ~ B ();- qui appelle
A::~A();
A::~A
devrait explicitementdelete
toutes les variables membres allouées au tas de l'objet A;- Enfin, le bloc de mémoire stockant ladite instance de la classe B est retourné au tas - quand new a été utilisé, il a d'abord alloué un bloc de mémoire sur le tas, puis a appelé des constructeurs pour l'initialiser, maintenant après que tous les destructeurs ont été appelés pour finaliser l'objet, le bloc où résidait l'objet est renvoyé dans le tas.