Здесь, на мой взгляд, нет никакой настоящей загадки.
Это не «рекурсивно» как таковое - вы просто бросаете новый объект в управляемую кучу, который немедленно разыменовывается;что делает его кандидатом на сборку мусора.
В конце концов сборщик мусора снова возвращается в исходное состояние, снова вызывая операцию и т. д.
Это не рекурсия - больше похоже на цепочку.Но в конечном итоге каждый Person
будет удален из памяти.
И через некоторое время сборщик мусора отправит вам электронное письмо с жалобой, что вы не играете честно.
Что касается C ++,ну, я думаю, это переполнение стека, так как тут и тогда происходит конструирование / разрушение, а потом очень хмурый компьютер.
Если ваша следующая логическая мысль: «Разве среда выполнения / язык не должны помешать этому случиться?'- нетРассматриваемый язык или среда выполнения не предназначены для того, чтобы помешать вам сделать что-то, что в противном случае было бы сочтено необоснованным;вам, программисту, нужно быть уверенным, что вы этого не делаете.
Тем не менее, в сценарии завершения работы приложения (см. ваш комментарий ниже) среда выполнения .Net будет действовать из собственных интересов.и в конечном итоге прекратит обработку этих финализаторов для завершения работы.Финализаторы для вашей выгоды, а не для среды выполнения.