Таким образом, вы не делаете никакого динамического распределения c, это все основано на стеке. Так что очистится приемлемо. Как вы знаете, ваш деструктор не делает ничего полезного.
Но обратите внимание, что throw в конструкторе не вызывает соответствующий деструктор, и если этот конструктор для object2 / имел / выполнил какое-либо распределение (которое вы хотели очистить в деструкторе) перед тем, как выбросить, тогда он может очень легко протечь. Но обратите внимание, что элементы с конструкторами и базовыми классами должны быть уничтожены. Правило состоит в том, что для каждого подобъекта, чье построение было / завершено / будет вызван соответствующий деструктор, но если бросить в середину этой функции конструктора, то он не будет завершен, и соответствующий деструктор не вызывается.
Это сложность использования throw
в конструкторах - и необходимость либо защищать все с помощью буферов RAII, либо убирать в ловушке.
Здесь есть дополнительная информация о том, что дает, а что нет destructed: Какие деструкторы запускаются, когда конструктор выдает исключение?