Simply put... start: is a label and declares a[nother] scope
Assuming start is as <0x00003000>, A a will be at <0x00003000> + some_offset say <0x00003004>.
goto start will ask the PC (Program Counter) to go to the address of start which occurs before the declaration of A -- outside it's scope -- hence "destroy a" calls the destructor.