我一直在尝试为我正在研究的 C++ 库创建一些自定义异常类。如果由于某种原因在测试异常时未在正确的位置捕获,这些自定义异常会捕获调试所需的额外信息,例如文件、行号等。然而,大多数人似乎建议从 STL 中的 std::exception 类继承,我同意这一点,但我想知道使用多重继承从每个派生的 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();
};