Здравствуйте, ibnhatab, Вы писали:
А>>>>Недавно на собеседовании спросили, почему нельзя кидать исключение из деструктора. А, собственно, почему? Накидал в 2005-й студии тестовый код, вроде все нормально отработало.
XMK>>>потому что деструктор может вызваться из-за брошенного исключения, в этом случае выкинутое исключение из деструктора даст сразу два необработанных исключения и неопределенное поведение с точки зрения стандарта. наличие необработанного исключения можно проверить функцией std::uncaught_exception.
ТКС>>Чоэто вдруг неопределенное? std::terminate() — очень даже определенное поведение.
I>А откуда ему там взятся если стоит catch(...)?
15.2.3 —
If a destructor called during stack unwinding exits with an exception, std::terminate is called
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.