вы находитесь в C ++, деструкторы должны вызываться, когда вы оставляете блоки, имеющие экземпляры классов в стеке, это не будет иметь место с вашим JMP, и я не говорю о значении указателя / фрейма стека
C ++ имеют исключения, используйте их, например, укажите в аргументе адрес функции без аргумента для вызова в вашей части сборки, и эту функцию throw
вы хотите исключить, и поместите try-catch
в пункт назначения вы хотите go