【发布时间】:2021-03-14 20:21:24
【问题描述】:
我希望我的程序在达到某个类的定义的最大对象数 (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 还是应该使用其他类型?还是我应该根本不抛出错误并采用不同的方法?
【问题讨论】:
-
域错误是数学问题恕我直言。我个人会使用
std::runtime_error。 -
如果框架不能为您提供更多资源,它应该抛出。它是什么框架?班级的实际规模是多少?您的示例没有成员,因此我不会费心限制实例数量。或者这应该是一个基类?
-
@bloody 我并没有质疑最小示例的有用性。我要的是真实案例,因为
sizeof应该有所作为。我希望您可以在sizeof较小时创建更多实例 -
@largest_prime_is_463035818 该框架是freeglut,我正在为灯光创建类以便于使用。这确实应该是灯光的基类。因为 freeglut 可以创建的光源数量有限,所以我认为在我的代码中限制此类的实例化是个好主意。
-
如果不使用资源计数器,创建更多灯光会发生什么?
标签: c++ class error-handling instance throw