C++ 异常—常见的错误处理问题
来源:互联网 发布:声音编辑软件 编辑:程序博客网 时间:2024/06/06 14:16
内存分配错误
如果无法分配内存,new和new[]的默认行为是抛出bad_alloc类型的异常,这个类型在<new>头文件中定义。代码应该捕捉这些异常,并正确处理异常。
不可能把对new和new[]的调用都放在try/catch中,但至少在分配大块内存时应这么做。下面示例演示了如何捕获内存分配异常:
注意:这个示例向cerr输出了一条错误信息,这样做的前提是假定程序在控制台模式下运行。在GUI应用程序中通常不需要控制台,此时应该以GUI特定的方式向用户显示错误信息。
当然,可以用一个try/catch块在程序中高层批量处理许多可能的新错误,如果这样做对程序有效的话。
另一个考虑是记录错误时可能会尝试分配内存,如果new失败,可能连记录错误信息的内存都没有。
不抛出异常的new
如果不喜欢异常,可以回到旧的C模式:在这种模式下,如果无法分配内存,内存分配例程将返回一个空指针。C++提供了new和new[]的nothrow版本,如果内存分配失败,将返回nullptr,而不是抛出异常,使用语法new(nothrow)而不是new可以做到这一点,如下所示:
这一语法看上去有点奇怪:确实需要使用nothrow,就像这是new的一个参数一样。
定制内存分配失败的行为:
如果无法分配内存,new和new[]的默认行为是抛出bad_alloc类型的异常,这个类型在<new>头文件中定义。代码应该捕捉这些异常,并正确处理异常。
不可能把对new和new[]的调用都放在try/catch中,但至少在分配大块内存时应这么做。下面示例演示了如何捕获内存分配异常:
try{ Ptr=new int[ numInts];} catch(const bad_alloc &e) { cerr<<__FILE__<<”(”<<__LINE__<< “):Unable to allocate memory: ”<<e.what()<<endl; //Handle memory allocation failure. return;}
注意:这个示例向cerr输出了一条错误信息,这样做的前提是假定程序在控制台模式下运行。在GUI应用程序中通常不需要控制台,此时应该以GUI特定的方式向用户显示错误信息。
当然,可以用一个try/catch块在程序中高层批量处理许多可能的新错误,如果这样做对程序有效的话。
另一个考虑是记录错误时可能会尝试分配内存,如果new失败,可能连记录错误信息的内存都没有。
不抛出异常的new
如果不喜欢异常,可以回到旧的C模式:在这种模式下,如果无法分配内存,内存分配例程将返回一个空指针。C++提供了new和new[]的nothrow版本,如果内存分配失败,将返回nullptr,而不是抛出异常,使用语法new(nothrow)而不是new可以做到这一点,如下所示:
ptr=new(nothrow)int[numInts];If(ptr==nullptr){ Cerr<<__FILE__<<”<”<<__LINE__<<”): Unable to allcate memory!”<<endl;//Handle memory allocation failure.return;}
这一语法看上去有点奇怪:确实需要使用nothrow,就像这是new的一个参数一样。
定制内存分配失败的行为:
0 0
- C++ 异常—常见的错误处理问题
- Java常见异常、错误处理
- python 常见异常错误处理
- 【C#】常见的异常及异常处理方式
- C++【错误和异常的处理】
- 常见的异常处理
- C++和C中常见的异常处理
- struts常见的错误异常
- hibernate常见的错误异常
- android常见的异常错误
- android常见的异常错误
- 常见的web异常错误
- python常见的异常错误
- 【C++】错误处理和异常处理
- 【C++】错误处理和异常处理
- 常见异常以及异常的处理
- 常见异常以及处理问题办法
- 【异常/错误处理系列】C语言如何实现异常处理
- 知乎-如何进入BAT2
- light oj1085All Possible Increasing Subsequences(树状数组+离散化+递推)
- void*的详解
- Codeforces 730H Delete Them
- iOS 10-需要添加的权限配置
- C++ 异常—常见的错误处理问题
- SpringMVC中上传文件MultipartFile转File
- Android 特色开发,使用传感器
- 高级安全windows防火墙管理单元无法加载解决方法
- i+++i的解释及i+++++i的语法错误
- 面向对象_匿名内部类的格式和理解
- Python学习-用户交互raw_input()
- HDOJ 5724 Chess (SG)
- [心得]利用python并发提速上线测试效率