【发布时间】:2018-06-27 09:47:52
【问题描述】:
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 ...) 可能是该类的实例而不是派生类。
使用虚函数和继承而不是上述方法的原因是什么?
【问题讨论】:
-
std::exception是抽象接口。如果你想要一个具体的基类来做你想做的事,考虑std::runtime_error -
您的
exception进行内存分配,因此大多数情况下与std::bad_alloc异常“不兼容”。 -
@Jarod42 如果它是一个固定长度的字符数组呢?
-
那么你的类将不能直接用于更长的消息。有一些事情要做。虚拟方式在这里似乎更好。
标签: c++ exception virtual-functions c++-standard-library