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.