Сигнал сам по себе не повлияет на выполнение текущего потока и, следовательно, на вызов деструкторов, потому что это другой контекст выполнения со своим собственным стеком, где вашобъекты не существуют.Это как прерывание: оно обрабатывается где-то за пределами контекста выполнения, и, если оно обрабатывается, элемент управления возвращается в вашу программу.
То же, что и в многопоточности, C ++ язык не делаетзнать понятие сигналов.Эти два полностью ортогональны друг другу и определены двумя не связанными стандартами.Как они взаимодействуют, зависит от реализации, если это не нарушает ни один из стандартов.
В качестве примечания, другой случай, когда деструктор объекта не вызывается, это когда его конструктор выдает исключение,Деструкторы членов все равно будут называться.