Вот установка.
У меня есть программа C++, которая вызывает несколько функций, все из которых потенциально бросают тот же набор исключения, и я хочу то же поведение для исключений в каждой функции (например, распечатайте сообщение об ошибке и сбросьте все данные к значению по умолчанию для exceptionA; просто печать для exceptionB; завершите работу чисто для всех других исключений).
Кажется, что я должен смочь установить поведение выгоды вызвать закрытую функцию, которая просто повторно бросает ошибку и выполняет выгоды, как так:
void aFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void bFunction()
{
try{ /* do some stuff that might throw */ }
catch(...){handle();}
}
void handle()
{
try{throw;}
catch(anException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(anotherException)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
catch(...)
{
// common code for both aFunction and bFunction
// involving the exception they threw
}
}
Теперь, что происходит, если "дескриптор" называют за пределами класса исключений. Я знаю, что этого никогда не должно происходить, но я задаюсь вопросом, не определено ли поведение по стандарту C++.
Если handle ()
вызывается вне контекста исключения, вы выбросите
без исключения обработано. В этом случае стандарт (см. Раздел 15.5.1) указывает, что
Если в настоящее время не обрабатывается исключение, выполнение
выражения throw
без вызовов операндовterminate ()
.
, поэтому ваше приложение будет прекращено. Вероятно, это не то, что вам здесь нужно.
Я нашел его здесь . Позор документации Hibernate.
-121--4222821-Аннотация для меня означает взятие общих частей коллекции вещей и создание из них базовой вещи, которую коллекция может затем использовать, как родительский класс.
Фасад - это лицо (буквально говоря), поэтому их аналогия с базовым классом не совсем держится. Фасад - это скорее интерфейс, поэтому он не должен быть связан с теми вещами, которые его используют. Я думаю, что это скорее маска. В моем классе будет «одноразовая» маска, например.
Таким образом, разница, на мой взгляд, заключается в том, что абстрактный образец позволяет построить иерархию, где как фасад образца позволяет классам выглядеть аналогично.
-121--4631680-Если вы используете вброс внутри блока catch, исключение будет возвращено обратно. При использовании вбрасывания за пределы блока catch приложение будет прервано.
Никогда, никогда, никогда не используйте catch (...), так как вы можете отловить ошибки приложения, которые вы не хотите перехватывать, например ошибки, нарушения доступа (в зависимости от того, как вы скомпилировали).
Прочтите замечательную книгу Джона Роббинса («Отладка приложений Windows»), в которой он более подробно объясняет, почему вам не следует этого делать.