Да. Это проще визуализировать, когда вы рассматриваете «блоки», в которых вы объявляете переменную, т.е. между какой парой скобок. Цикл сам по себе является блоком, и, когда он достигает закрывающей скобки, перед следующей итерацией вызываются все деструкторы переменных автоматического хранения, объявленные в цикле.
может развернуть цикл компилятором что-нибудь об этом?
Как правило, не думайте о том, что компилятор будет оптимизировать, потому что он все еще должен гарантировать поведение вашей программы, независимо от того, что он делает для ее оптимизации. В этом случае развертывание цикла ничего не изменит в этом случае, если это произойдет.