gpt4 book ai didi

c++ - 为什么要创建自己的自定义异常类?

转载 作者:行者123 更新时间:2023-11-30 01:33:55 25 4
gpt4 key购买 nike

我是 C++ 新手,我想了解您为什么要创建自己的自定义异常类。

我一直在阅读一些书籍和在线资料,他们在其中指定您可以创建自己的异常类,但他们没有解释为什么以及何时要创建一个异常类。

为什么要创建这个类

class ArrayException
{
private:
std::string mError;
public:
ArrayException(std::string error) : mError(error) {}
const char *GetError()
{
return mError.c_str();
}
};

在我们自定义的 IntegerArray 容器类中

    if(index < 0 || index >= GetLength())
{
throw ArrayException("Invalid index");
}

main() 内部

    int main()
{
IntArray arr;
try
{
arr[6] = 100;

}
catch(ArrayException error)
{
std::cout << "An exception has been caught! " <<
error.GetError() << std::endl;
}
return 0;

为什么不使用

if(index < 0 || index >= GetLength())
{
throw "Invalid index";

main() 内部

int main()
{
IntArray arr;
try
{
arr[6] = 100;

}
catch(const char *error)
{
std::cout << "An exception has been caught! " << error <<
std::endl;
}
return 0;

}

这是类(class)中的示例之一。

以正常方式抛出和捕获异常不是很容易吗?我希望我的问题有意义,因为英语不是我的母语。

最佳答案

Why would you create your own custom exception class?

因为异常可以被类捕获,而自定义类允许捕获器执行自定义的catch子句。示例:

while(true) {
try {
do_something();
} catch(custom_recoverable_exception& e) {
// assume that we know about this exception; why it is thrown
// and how to fix the problem in case it is thrown
recover(e.custom_data);
continue; // try again
} catch(std::exception& e) {
// some other exception; we don't know how to recover
diagnose_exception(e); // write to a log or to standard output
throw; // re-rhrow: Maybe the caller of this function knows how to proceed
}

proceed_with_the_loop();

Would it not be easy just to throw and catch an exception the normal way?

抛出和捕获自定义类的对象的正常方式。

如果你的意思是,为什么不抛出一个指向字符串的指针:因为如果所有抛出的对象都具有相同的类型,那么你就不能以不同的方式处理一个抛出。


请注意,通常从 std::exception(或其子类之一)继承自定义异常类,以便该函数的用户可以使用与标准异常相同的逻辑来处理您的自定义异常如果他们不需要特殊处理。

关于c++ - 为什么要创建自己的自定义异常类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57275902/

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