Класс ошибка и виртуальные функции
Есть собственный класс ошибка
class SocketException : public std::exception
{
std::string _err;
public:
SocketException(const std::string& str) throw() : std::exception(), _err(str){}
SocketException(const SocketException& src) throw() : std::exception(), _err(src._err){}
virtual const char *what() const throw()
{
return _err.c_str();
}
virtual ~SocketException() throw(){}
};
есть функция, для доп обработки ошибки
void IOSubscriber::exceptionEvent(EventLoop &eventLoop, const std::exception &exp) {
(void)eventLoop;
throw exp;
}
В какой-то момент я вызываю доп обработчик с моей ошибкой
(*it)->exceptionEvent(*this, SocketException("Out-band data"));
И ожидаю что эта же ошибка вылетит и перехватится этим обработчиком:
try {
loop.runLoop();
}
catch (const std::exception& err) {
std::cerr << err.what() << std::endl;
}
Но тут вместо "Out-band data" я получаю "std::exception". Я подозреваю, что обрезка типа происходит в момент throw, если это так, то можно этого избежать?