New*_*bee 8 c++ if-statement exception-handling
我已经在很多地方使用过if else语句,但是我是异常处理的新手.这两者之间的主要区别是什么......
例如:
int *ptr = new (nothrow) int[1000];
if (ptr == NULL) {
// Handle error cases here...
}
Run Code Online (Sandbox Code Playgroud)
要么
try
{
int* myarray= new int[1000];
}
catch (exception& e)
{
cout << "Standard exception: " << e.what() << endl;
}
Run Code Online (Sandbox Code Playgroud)
所以我们在这里使用标准类的异常,它有一些像e.what这样的构建函数.所以它可能是有利的......除了所有其他功能处理我们可以使用 - 如果否则 - 也.使用异常处理还有其他优点吗?
感谢名单
要收集答案中的评论内容:
自 1998 年标准化以来,new失败时不会返回空指针,而是抛出异常,即std::bad_alloc. 这与 C 不同malloc,也可能与 C++ 的一些早期标准实现不同,其中也new 可能返回 NULL(我不知道,老实说)。
在 C++ 中,也有可能在分配失败时获取空指针而不是异常:
int *ptr = new(std::nothrow) int[1000];
Run Code Online (Sandbox Code Playgroud)
简而言之,您的第一个代码将无法按预期工作,因为它是在存在 C++ 异常的情况下尝试进行 C 样式错误处理。如果分配失败,将引发异常,永远不会进入 if 块,并且程序可能会终止,因为您没有捕获bad_alloc.
有很多文章将一般错误处理与异常与返回代码进行比较,并且在这里试图涵盖该主题会很费力。例外的原因包括
errno与一个全局变量和一个返回的错误代码相比,异常可以将任意信息传递到错误处理站点。| 归档时间: |
|
| 查看次数: |
6525 次 |
| 最近记录: |