我希望我的程序在达到特定类(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);
}
如果超出限制,将导致程序崩溃的调试构建(快速失败),这在开发,测试和调试期间通常非常有用,但是如果成品中可以超过限制,则显然不应该使用它。 (由于断言通常会在发行版本中删除,因此不会引起注意,并且会导致任何问题或未定义的行为超出限制)。
关于c++ - 在类的最大实例化上引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65115466/