По какой причине std::exception
спроектирован таким образом, что для создания нового типа исключения создается производный класс, который переопределяет функцию virtual what()
, чем создает класс, который может содержать строку и возвращать ее на what()
?
class exception
{
std::string msg;
public:
exception(std::string _msg) : msg(_msg) {}
void set(std::string _msg) { msg = _msg; }
std:string what() { return msg; }
};
И каждая ошибка (bad_alloc, logical_error ...)
может быть экземпляром класса, а не производным классом.
В чем причина использования виртуальных функций и наследования, а не вышеуказанного подхода?