Во время чтения «Более Исключительные C++» по Hurb Саттер, я наткнулся на следующий код:Try Поймайте блок в деструкторе
// Example 19-5: Alternative right solution
//
T::Close()
{
// ... code that could throw ...
}
T::~T() /* throw() */
{
try
{
Close();
}
catch(...) { }
}
Мое понимание было, это не очень хорошая идея. Потому что, если T destructor вызывается во время разворачивания стека из-за исключения, а затем Close() выдает исключение, то это вызовет вызов Terminate().
Может кто-то пролить свет на это. Заранее спасибо.
Вы должны избежать деструктора, который может вызвать исключение, это нормально, чтобы поймать и управлять ими должным образом. –
Возможно, вы захотите прочитать [N4152] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4152.pdf), «исключенные исключения», проголосовали за C++ 17 , –