выполняется следующий псевдокод:
1. beginInsertRows(....)
2. // Emplacing some data to container
3. endInsertRows()
Вопрос следующий. Как гарантировать консистентность модели, если в строке 2 бросится исключение, которое мы поймаем в try/catch блоке, ведь метода по типу cancelInsertRows() мы не имеем?
Qt спроектирован для -fno-exceptions
в строке 2 и лови
template<typename Functor> struct ExitScope { private: Functor _scope_exit_functor; public: ExitScope(Functor f): _scope_exit_functor(f) {} ~ExitScope() { if (_scope_exit_functor) _scope_exit_functor(); } } ... beginInsertRows(....); ExitScope scope([this]() { endInsertRows(); } // Emplacing some data to container
Обсуждают сегодня