- Вы можете свернуть свой конструктор с помощью внутри него try-catch.
- Нет, вы должны никогда разрешить исключение в деструкторе.
Забавная, менее известная особенность встраивания try-catch в конструктор:
object::object( int param )
try
: optional( initialization )
{
// ...
}
catch(...)
{
// ...
}
Да, это является допустимым C ++.Дополнительным преимуществом здесь является тот факт, что попытка будет перехватывать исключения , создаваемые конструкторами членов данных класса , даже если они не упомянуты в инициализаторе ctor или если инициализатор ctor отсутствует:
struct Throws {
int answer;
Throws() : answer(((throw std::runtime_error("whoosh!")), 42)) {}
};
struct Contains {
Throws baseball;
Contains() try {} catch (std::exception& e) { std::cerr << e.what() << '\n'; }
};