Бросаем исключение в одном модуле, перехватываем в другом. В другом модуле с исключением ничего не делаем. Могут ли быть в таком случае проблемы? Вроде бы проблем быть не должно.
// в одном модуле
void f()
{
try
{
//... Где-то тут выбросилось искл.
}
catch (MyException const& e)
{
//... Перехватили, обработали и перебросили дальше
throw;
}
}
// в другом модуле
try
{
// вызываем ф-цию из первого модуля
f();
}
catch (MyException const&)
{
// перехватываем исключение из первого модуля
state = eNoCalc;
}
Здравствуйте, sc, Вы писали:
sc>Бросаем исключение в одном модуле, перехватываем в другом. В другом модуле с исключением ничего не делаем. Могут ли быть в таком случае проблемы? Вроде бы проблем быть не должно.
Никаких гарантий нет...
Но если окажется, что сама по себе передача исключения через границы происходт безболезненно и используются динамически загружаемые модули, то могут быть проблемы такого характера:
//...
int real_main()
{
module m = load_module(...);
// Вызов приводит к выбросу исключения, которое определено в самом модуле
// и вызывающий о нем ничего не знает.
m->func();
//...
// В деструкторе module::~module произойдет выгрузка модуля.
}
int main() {
try {
return real_main();
}
catch(const exception& ex) {
const char* p = ex.what(); // oops! реализация exception::what (в наследнике) была выгружена вместе с модулем.
//...
}
}