Sim. É mais fácil visualizar quando você considera os "blocos" nos quais declara uma variável, ou seja, entre qual par de chaves. O loop é um bloco em si e, quando atinge o colchete de fechamento, antes da próxima iteração, todos os destruidores de variáveis de armazenamento automático declaradas no loop são chamados.
pode desenrolar loop pelo compilador mudar alguma coisa sobre isso?
Como regra geral, não pense no que o compilador otimizará, pois ainda precisa garantir o comportamento do seu programa, não importa o que ele faça para otimizá-lo. Nesse caso, o desenrolar do loop não mudará nada nesse sentido se isso acontecer.