Это неопределенное поведение.Например, когда я запускаю ваш пример в MSVC, у меня выводится -572662307
.
Нет никаких гарантий того, что произойдет, если вы попытаетесь получить доступ к недопустимой памяти.Вероятно, случится так, что он все равно получит доступ к неверной памяти, и если эта память не изменилась, вы можете получить старое значение.Это на самом деле плохо, потому что кажется, что программа работает так, как задумано, тогда как на самом деле это не так.
Я понимаю, почему я получаю вывод как 10, как мы можем видеть эту памятьудержание этого значения больше не сохраняется в куче?
Память больше не действительна, но число 10
может все еще находиться в этой памяти, и a.ref
все еще указывает на эту память.Таким образом, даже если память не действительна, 10
может сохраняться.