Исключения в C++
От: Шахтер Интернет  
Дата: 23.03.16 14:53
Оценка:
Мне видится, что было бы полезно внести следующие изменения в механизм исключений C++.

Во-первых, добавить новый оператор error.

throw Type(args);

error Type(args);


В отличии от оператора throw, error не прерывает исполнения, а сигнализирует об ошибке.

Блок try/catch должен быть устроен так

try(CatchType obj)
 {
  ....

  error "error 1";

  ....

  throw "error 2";    

  ....
 }


При этом CatchType имеет следующий интерфейс:

class TryCatch
 {
  ....

  public:

   void operator () (const char *str); // для типа const char *

   void operator () (std::exception ex); // для типа std::exception

   ....

   void operator () (); // для оставшихся типов
 };


Т.е. блок try конструирует объект-ловушку и для обработки исключений вызываются методы этого объекта.
При этом может случится несколько вызовов, если в процессе исполнения тела блока был вызван error.

В процессе свёртки стека деструкторы классов принудительно "останавливают" исключения.
Т.е. если в деструкторе произошло исключение, то управление передаётся не на конец try блока, а на конец деструктора.
Тем самым снимается проблема исключений в деструкторах.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.