Я пытаюсь создать некоторые настраиваемые классы исключений для библиотеки С++, над которой я работаю. Эти пользовательские исключения захватывают дополнительную информацию, такую как файл, номер строки и т.д., Необходимые для отладки, если по какой-то причине при тестировании исключения не попадают в нужное место. Однако большинство людей, похоже, рекомендуют наследовать из класса std:: exception в STL, с которым я согласен, но мне было интересно, возможно, было бы лучше использовать множественное наследование для наследования от каждого из производные классы std:: exception (например, std:: runtime_error) и настраиваемый класс исключений, как в приведенном ниже коде?
Другое дело, как делать конструкторы копирования и операции присваивания в классах исключений? Должны ли они быть отключены?
class Exception{
public:
explicit Exception(const char *origin, const char *file,
const int line, const char *reason="",
const int errno=0) throw();
virtual ~Exception() throw();
virtual const char* PrintException(void) throw();
virtual int GetErrno(void);
protected:
std::string m_origin;
std::string m_file;
int m_line;
std::string m_reason;
int m_errno;
};
class RuntimeError: public virtual std::runtime_error, public Exception{
public:
explicit RuntimeError(const char *origin, const char *file,
const int line, const char *reason="",
const int errno=0) throw();
virtual ~RuntimeError() throw();
};