gpt4 book ai didi

c++ - 在类的最大实例化上引发错误

转载 作者:行者123 更新时间:2023-12-03 07:21:02 25 4
gpt4 key购买 nike

我希望我的程序在达到特定类(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 anothertype? Or should I not throw an error at all and follow a differentapproach?


关于抛出哪个异常: std::domain_error专门与函数的参数超出允许范围有关,因此这不是一个很好的选择。正如@NathanOliver所建议的, std::runtime_error将是一个不错的选择。或从中派生的自定义异常。
关于引发异常或使用其他方法:一个重要的问题是何时预计将发生错误以及由谁来处理。
异常通常用于正常操作期间可能发生的错误,最好在运行时进行处理。
如果分配的资源量是在开发期间确定的,并且过多分配资源表明存在错误,那么可以使用断言:
Resource::Resource() {
assert(++count <= MAX);
}
如果超出限制,将导致程序崩溃的调试构建(快速失败),这在开发,测试和调试期间通常非常有用,但是如果成品中可以超过限制,则显然不应该使用它。 (由于断言通常会在发行版本中删除,因此不会引起注意,并且会导致任何问题或未定义的行为超出限制)。

关于c++ - 在类的最大实例化上引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65115466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com