Во-первых, нормально вызывает функцию-член :
Функции-члены, включая виртуальные функции ([class.virtual]), могут вызываться во время создания или уничтожения ([class.base.init]).
(Ваш конструктор начал выполнение.)
Но есть еще это специально для деструкторов:
Как только деструкторвызывается для объекта, объект больше не существует;поведение не определено, если деструктор вызывается для объекта, срок жизни которого истек ([basic.life]). [Пример: Если деструктор для автоматического объекта вызывается явным образом, а затем блок оставляется таким образом, который обычно вызывает неявное уничтожение объекта, поведение не определено. - конец примера]
Итак, хотя мы знаем, что ваш деструктор не будет вызываться неявно «снова», вопрос в том, приведет ли последующее повторное выбрасывание к сценарию, в которомобъект «снова» разрушен в смысле, описанном в этом отрывке.
Я на самом деле разочаровался в стандарте в этой точке, и мне интересно, немного ли это занижено.Я хочу сказать, что это само по себе является, вероятно, достаточной причиной, чтобы избежать этого благонамеренного паттерна, и просто вместо этого поместите свою очистку в симпатичную приватную функцию-член для совместного использования между вашим блоком catch
и вашим деструктором.