Класс ошибка и виртуальные функции

Есть собственный класс ошибка

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, если это так, то можно этого избежать?


Ответы (0 шт):