C++中的异常处理(二) 标签: c++C++异常处理 2012-11-24 20:56 1713人阅读 评论(2) 收藏 举报  分类: C++编程语言(24)  版权声明:本文为博主原创文章,未经博主允许不得转载. 先看下面的代码: int main() { int *i=new int(10); /* 这中间的代码出现异常 */ delete i; return 0; } 如果出现了这样的情况,动态分配的内存就不会被释放.为了处理这样的问题,可以使用C++标准库auto_ptr类. 如果使…
异常就是运行时出现的不正常,例如运行时耗尽了内存或遇到意外的非法输入.异常存在于程序的正常功能之外,并要求程序立即处理.不能不处理异常,异常是足够重要的,使程序不能继续正常执行的事件.如果找不到匹配的catch,程序就调用库函数terminate. 如果不处理异常将会出现上图的效果.下面是处理异常的代码: [cpp] view plaincopy #include<iostream> using namespace std; int main() { try { int a=3,b=0; in…
1.异常是通过抛出对象而引发的.该对象的类型决定应该激活哪个处理代码.被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个. 2.执行throw的时候,不会执行跟在throw后面的语句,而是将控制从throw转移到匹配的catch,该catch可以是同一函数中局部的catch,也可以在直接或间接调用发生异常的函数的另一个函数中.控制从一个地方传到另一地方,这有两个重要含义:  (1)沿着调用链的函数提早退出.  (2)一般而言,在处理异常的时候,抛出异常的块中的局部存储不存在了.…
先看下面的代码: [cpp] view plaincopy int main() { int *i=new int(10); /* 这中间的代码出现异常 */ delete i; return 0; } 如果出现了这样的情况,动态分配的内存就不会被释放.为了处理这样的问题,可以使用C++标准库auto_ptr类. 如果使用下面的代码,内存就一定会被释放 [cpp] view plaincopy #include<memory> int main() { std::auto_ptr<int…
查看普通函数的声明的时候,不可能知道该函数会抛出什么异常,但是在捕获异常的时候要知道一个函数会抛出什么样的异常,以便捕获异常. 异常说明:指定,如果函数抛出异常,抛出的异常将是包含在该说明中的一种,或者是从列出的异常中派生的类型. 1.定义异常说明 异常说明跟在形参表后.一个异常说明在关键字throw之后跟着一个由圆括号括住的形参列表,该列表可能为空或者多个,若为多个,则用逗号分开.例如: void getWork() throw(runime_error);                  …
重读C Primer Plus ,查漏补缺 重读C Primer Plus,记录遗漏的.未掌握的.不清楚的知识点 分支和跳转 1.ctype.h头文件里包含了一些列用于字符判断的函数,包括判断数字.大小写字母,控制字符,可打印字符等一些列函数以及转换字母大小写的字符映射函数. 2.C99标准要求编译器支持至少127层if-else嵌套. 3.包含iso646.h头文件,可以使用and.or.not代替 &&.||.!,这是为了适应世界各地的键盘符号. 字符输入/输出和输入确认 4. 缓冲区…
书中关于设计模式的介绍很详细. 一.单例模式 作者建了一个preferences类来解释什么是单例模式.这个preferences类并非我第一次见到,在android中也有这个类,不过以前都是只管用即可,但这次作者在书中用php将这个类重写了一遍. 采取单例模式的类会具有以下几个特点: 1.该类产生的对象可以在系统中的任何地方被使用. 2.在系统中只会产生一个该类的对象 3.无法再创建该类对象而将原有对象覆盖 android中的preferences类就满足上面这几条,用一句话来形容prefer…
C++ Primer书上这个例子讲的很不错,写写帮助自己理解标准库和智能指针. .h 文件内容 #include <fstream> #include <iostream> #include <vector> #include <string> #include <map> #include <set> #include <sstream> #include <memory> class QueryResult…
shared_ptr和new结合使用 一个shared_ptr默认初始化为一个空指针.我们也可以使用new返回的指针来初始化一个shared_ptr: shared_ptr<double> p1; shared_ptr<int> p2(new int(42)); // p2指向一个值为42的int 接受指针参数的智能指针构造函数是explicit的,因此,我们不能将一个内置指针隐式的转换为一个智能指针,必须使用直接初始化形式: shared_ptr<int> p1 =…
1.finally package second; public class C { public static void main(String[] args){ String name = null;//定义一个null的字符串 int name_len = 0; /** * 异常前的代码块会被执行 * 异常后的代码块不会被执行,try会直接寻找异常处理catch */ try{ System.out.println("我还没异常!"); name_len = name.lengt…