在 class 的最大实例化上抛出错误
Throw error on max instantiations of class
我希望我的程序在达到某个 class (MAX) 的定义的最大对象数时抛出错误。我必须限制实例化的数量,因为我正在使用提供有限资源的框架。
目前我有以下(简体):
class Resource {
private:
static int count;
public:
Resource();
};
int Resource::count = 0;
Resource::Resource() {
if (++count > MAX) {
throw std::domain_error("Cannot create more resources.");
}
}
是否推荐使用 std::domain_error
还是我应该使用其他类型?还是我根本不应该抛出错误并采用不同的方法?
我会回答一般性问题,不考虑申请的任何细节。
Is the use of std::domain_error recommended or should I use another
type? Or should I not throw an error at all and follow a different
approach?
关于抛出哪个异常:std::domain_error
特别与函数的参数超出允许范围有关,所以这不太合适。正如@NathanOliver 所建议的那样, std::runtime_error
将是一个不错的选择。或者从中派生的自定义异常。
关于抛出异常或使用不同的方法:一个重要的问题是何时错误预计会发生以及谁可以处理它.
异常通常用于正常操作期间可能发生的错误,最好在 运行 时处理。
如果分配的资源量是在开发过程中确定的,而过多的资源分配表明存在错误,则可以选择断言:
Resource::Resource() {
assert(++count <= MAX);
}
如果超过限制,这将使程序的调试构建崩溃(快速失败),这在开发、测试和调试期间通常非常有用,但如果可以限制,则显然不应使用成品中超标。 (由于断言通常在发布版本中被删除,因此它会被忽视并导致超出限制的任何问题或未定义行为)。
我希望我的程序在达到某个 class (MAX) 的定义的最大对象数时抛出错误。我必须限制实例化的数量,因为我正在使用提供有限资源的框架。
目前我有以下(简体):
class Resource {
private:
static int count;
public:
Resource();
};
int Resource::count = 0;
Resource::Resource() {
if (++count > MAX) {
throw std::domain_error("Cannot create more resources.");
}
}
是否推荐使用 std::domain_error
还是我应该使用其他类型?还是我根本不应该抛出错误并采用不同的方法?
我会回答一般性问题,不考虑申请的任何细节。
Is the use of std::domain_error recommended or should I use another type? Or should I not throw an error at all and follow a different approach?
关于抛出哪个异常:std::domain_error
特别与函数的参数超出允许范围有关,所以这不太合适。正如@NathanOliver 所建议的那样, std::runtime_error
将是一个不错的选择。或者从中派生的自定义异常。
关于抛出异常或使用不同的方法:一个重要的问题是何时错误预计会发生以及谁可以处理它.
异常通常用于正常操作期间可能发生的错误,最好在 运行 时处理。
如果分配的资源量是在开发过程中确定的,而过多的资源分配表明存在错误,则可以选择断言:
Resource::Resource() {
assert(++count <= MAX);
}
如果超过限制,这将使程序的调试构建崩溃(快速失败),这在开发、测试和调试期间通常非常有用,但如果可以限制,则显然不应使用成品中超标。 (由于断言通常在发布版本中被删除,因此它会被忽视并导致超出限制的任何问题或未定义行为)。