Программа вызывает неопределенное поведение. Когда программа делает это, компилятор может делать все, что захочет, включая создание программы, которая работает так, как можно было бы ожидать.
Вероятная причина, по которой он работает так, как он работает, заключается в следующем. В конце внутреннего блока test
выходит из области видимости и запускается его деструктор. Это освобождает блок памяти, используемый для хранения фактической строки для других целей, но память не очищается (это было бы пустой тратой времени). Освободившаяся память по той или иной причине не используется повторно до того, как bbbb
будет распечатано.
(Обратите внимание, что назначение и распечатка cccc
действительны.)