在我的应用程序中,我使用不同的开源库,这会引发不同的异常。
我没有处理异常处理的经验,当我知道时,我总是只做 try/catch 事情
有问题。
现在我想构建某种对象来处理其中的所有异常。我不知道如何开始,即使可能
例如我有我的 A 类和 B 类
Class A
{
void method1()
{
Foo foo = new foo // external lib throws throw std::bad_alloc();
}
};
Class B
{
Void method1()
{
Int d = m_foo[0] // external lib throw std::runtime_error( message );
}
};
我想以某种方式在我的应用程序的中心位置处理这些类型和其他类型 我应该使用什么策略?
更新:
在尝试了提供的建议并在我的应用程序的主体中实现了 try/catch 之后,当异常抛出时它永远不会出现的问题是我得到的是这个但它永远不会到达 try/catch:
最佳答案
您可以在main()
函数中使用try...catch
结构。 C++ 标准库的所有异常都派生自 std::exception
,因此这是一个很好的备份。但是,您应该区分所有不同类型的异常,或者至少区分那些更常见的异常。您还可以创建自己的异常,作为派生自 std::runtime_error
的类。您可以有多个 catch 部分,但从更具体的部分到更一般的部分排序。
try {
// more things...
}
catch(const std::bad_alloc &ba)
{
// memory error
std::cerr << "Memory error" << std::endl;
exit( EXIT_FAILURE );
}
catch(const std::runtime_error &re)
{
// customized error, probably
std::cerr << "ERROR: " << re.what() << std::endl;
exit( EXIT_FAILURE );
}
catch(const std::exception &e)
{
// general (unexpected) error
std::cerr << "Unexpected ERROR: " << e.what() << std::endl;
exit( EXIT_FAILURE );
}
记住您需要#include stdexcept
和exception
。
希望这会有所帮助。
关于c++如何用泛型异常对象处理所有类型的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9495906/