Russian Qt Forum
Декабрь 01, 2021, 05:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: как правильно прервать конструктор класса?  (Прочитано 15604 раз)
Tonal
Гость
« Ответ #30 : Апрель 16, 2010, 12:47 »

Про деструкторы и исключения - исключения из деструктора вылетать не должно.
Т. е. все действия, которые могут повлечь генерацию исключения нужно делать либо в конструкторе, либо явно вызывая какую-либо функцию.
Например, пусть у нас есть класс для транзакций trans_t. Для удобного использования, он должен иметь явные метоы commit - могущий выкинуть исключение и rollback - не выкидывающий.
В деструкторе транзакция должна проверять была ли она завершена, и если нет, вызывать rollback.

Так же и file_t - должен иметь функцию flush - сбрасывающую буфера на диск и могущую выкинуть исключение и функцию close закрывающую файл без исключений. В деструкторе вызывается именно close если файл всё ещё открыт.

Ну и RAII - всего лишь удобная аббревиатура ссылающаяся на совершенно конкретный приём/шаблон программирования.
Ничего особо выдающегося или гениального в ней нет - всего лишь систематизация, как и написал BRE
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.143 секунд. Запросов: 20.