Вызывается вызов деструктора при вызове конструктора делегирования? - программирование
Подтвердить что ты не робот

Вызывается вызов деструктора при вызове конструктора делегирования?

Хорошо известно, что при вызове конструктора все полностью построенные под-объекты будут уничтожены в обратном порядке, включая данные членов и все типы базовых классов. Однако деструктор не вызывается для не-делегирующих конструкторов. Для конструктора делегирования объект был создан при вводе тела конструктора, но конструкция продолжается несколько. Поэтому возникает вопрос, вызывается ли деструктор класса, если делегирующий конструктор выдает исключение из своего тела?

class X
{
public:
    X();
    X(int) : X() { throw std::exception(); } // is ~X() implicitely called?
    ~X();
};
4b9b3361

Ответ 1

Правило состоит в том, что деструктор вызывается для всех полностью построенных объектов. Объект считается полностью построенным после завершения любого конструктора, включая делегированные конструктор (хотя программа продолжается в другом Конструктор).

Ответ 2

  Время жизни объекта начинается, когда любой конструктор (т.е. в случай делегирования, конечный целевой конструктор) успешно завершено. Для целей [С++ 03] §3.8, 'вызов конструктора завершено "означает любой вызов конструктора. Это означает, что исключение, выброшенное из тела делегирующего конструктора, приведет к деструктор, который будет вызван автоматически.

источник.

И здесь - хорошая статья о делегировании конструкторов, если кто-то захочет ее прочитать.