Так. Це легше візуалізувати, якщо врахувати "блоки", в яких ви оголошуєте змінну, тобто між якою парою дужок. Цикл сам по собі є блоком, і коли він досягне дужки закриття, перед наступною ітерацією викликаються всі деструктори змінних автоматичного зберігання, оголошені в циклі.
може, розгортання циклу компілятором щось змінить?
Як правило, не думайте про те, що компілятор буде оптимізувати, тому що він все ще повинен гарантувати поведінку вашої програми, незалежно від того, що вона робить для її оптимізації. У цьому випадку розгортання циклу нічого не змінить до цього ефекту, якщо це станеться.