Vous pouvez être dérouté par un comportement indéfini ici. La norme C++ n'a aucune règle quant à ce qui se passe si vous utilisez un objet après que son destructeur a été exécuté, car ce comportement n'est pas défini, et par conséquent l'implémentation peut faire tout ce qu'elle veut. Généralement, les concepteurs de compilateurs ne font rien de spécial pour un comportement indéfini, et donc ce qui se passe est un artefact de ce que d'autres décisions de conception ont été prises. (Cela peut parfois donner des résultats vraiment bizarres.)
Par conséquent, une fois que vous avez exécuté le destructeur, le compilateur n'a plus aucune obligation concernant cet objet. Si vous ne vous y référez pas, cela n'a pas d'importance. Si vous vous y référez, c'est un comportement indéfini, et du point de vue du standard, le comportement n'a pas d'importance, et puisque la norme ne dit rien, la plupart des concepteurs de compilateurs ne se soucieront pas de ce que fait le programme. Dans ce cas, la chose la plus simple à faire est de laisser l'objet intact, car il ne tient pas sur les ressources, et son stockage a été alloué lors du démarrage de la fonction et ne sera pas récupéré tant que la fonction sorties. Par conséquent, la valeur du membre de données restera la même.La chose naturelle pour le compilateur à faire quand il lit ob2.day
est d'accéder à l'emplacement de la mémoire.
Comme tout autre exemple de comportement indéfini, les résultats peuvent changer en cas de changement de circonstances, mais dans ce cas, ils ne le seront probablement pas. Ce serait bien si les compilateurs attrapent plus de cas de comportement indéfini et de diagnostic, mais il est impossible pour les compilateurs de détecter tout comportement indéfini (certains surviennent à l'exécution) et souvent ils ne vérifient pas le comportement qu'ils ne pensent pas. probable.
Beaucoup de réponses font référence à "la pile". Si vous n'êtes pas sûr de ce qu'est la pile, lisez cette page: http://web.archive.org/web/20071029040931/www.dirac.org/linux/gdb/02a-Memory_Layout_And_The_Stack.php –