Реализовал класс исключения наследующий от std::exception
Код: Выделить всё
class change_codec: public std::exception {
public:
change_codec(codec_type last,
codec_type cur);
const char *what() const throw() ;
codec_type last() const;
codec_type current() const;
private:
codec_type _last;
codec_type _cur;
};
change_codec::change_codec(codec_type last,
codec_type cur)
{
_last = last;
_cur = cur;
}
const char *change_codec::what() const throw()
{
std::stringstream m;
m << "Codec changed from " << _last << " to " << _cur;
return m.str().c_str();
}
codec_type change_codec::last() const
{
return _last;
}
codec_type change_codec::current() const
{
return _cur;
}
Вызов этого исключения:
Код: Выделить всё
if (_codec != _data->codec) {
sem_post(_sem);
throw change_codec(_codec, _data->codec);
}
Проверка этого исключения:
Код: Выделить всё
try {
// основной цикл live555
env->taskScheduler().doEventLoop(&is_stop);
} catch (change_codec &m) {
*env << m.what();
}
Я ожидал увидеть сообщение и продолжение или корректную остановку программы, но этого не происходит:
Код: Выделить всё
terminate called after throwing an instance of 'change_codec'
what(): Codec changed from 4 to 3
Aborted
Вопрос - почему происходит "грубое" завершение программы и как я должен модифицировать класс исключения для решения этой проблемы?
Спасибо.