Re[5]: Обработка ошибок в деструкторе своего умного указател
От: andyp  
Дата: 23.12.22 18:52
Оценка:
Здравствуйте, Sm0ke, Вы писали:

S>Что мне это даст? Я должен решить вызывать ли метод unset() у m_target или нет. Но это будет известно только когда clear() отработает до конца.


Даст возможность отдельно обработать ситуацию, когда что-то вылетело из clear


template<typename Callable>
class my_scope_failure_guard{
    Callable _ftn;
    int _cnt;    
public:
    my_scope_failure_guard(Callable f):_ftn(f), _cnt(std::uncaught_exceptions()){}
    ~my_scope_failure_guard()
    {
        if(std::uncaught_exceptions() > _cnt ) _ftn();        
    }
};

~MySmartyPtr()
{

    try{
    //здесь не важно, пришли мы сюда, раскручивая стек или просто при вызове деструктора,
    //можно снова кидать
        {
          my_scope_failure_guard guard([&](){unset();});    
          clear();
          //лямда вызовется здесь, только если исключение вылетело из clear().    
        }
        //здесь еще можно кидать         
    }
    catch(...)
    {
    
    
    }

}
Отредактировано 23.12.2022 18:55 andyp . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.