我看到有人说自定义异常类中不应该包含除了基本类型以外的内容,因为这样可能会在异常中抛出另一个异常(就像梦中的梦一样)。并且你应该按值抛出异常,按引用捕获异常。
以下是我的异常类头文件:
class DeepthroatException : public std::runtime_error {
public:
DeepthroatException(const char* err); // set err member to err
private:
// Error description
const char* err;
};
但是我不喜欢它,因为它引入了一个与内存管理有关的问题,这对肉眼是不可见的,我需要使用地雷探测器。如果可能的话,我想改用std::string
。
但是第一段中存在的问题,让我考虑了以下解决方案:
#include <string>
class DeepthroatException : public std::runtime_error {
public:
DeepthroatException(std::string err) throw(); // set err member to err, no throw
private:
// Error description
std::string err;
};
这样做可以吗?
runtime_error
,并让它处理问题。 - Bo Perssonruntime_error
构造函数。 - Joseph Thomsonbad_alloc
异常。说throw()
并不能帮助代码不抛出异常,只会让情况变得更糟。你可能会问自己是否想尝试处理这种情况,或者是否可以接受bad_alloc
(很快就会发生)。 - Bo Persson