今天让我们来分析一下C++中的智能指针和异常,首先呢先普及一下概念!
(1)智能指针:智能或者自动化的管理指针所会向的动态资源的释放。
(2)异常:当一个函数发现自己无法处理的错误时,让函数的调用者直接或间接的处理这个问题。
(3)RAII:资源分配即初始化。构造函数完成对象的初始化,析构函数完成对象的清理,而不是删除。
在实际写代码过程中,我们很容易写出存在异常的代码,不信来看看下面几个例子 :
void Test() { int *p = new int(1); if (1) { return; } delete p; }
很容易可以看出在if语句中已经返回了,那后面的代码自然是执行不了了,所以就出现了内存泄露的危险,这可是非常可怕的呢 ,它可能会耗尽内存,不仅当前程序会崩溃,严重的整个系统都会崩溃,这是看你怎么办,哈哈。这时
,肯定会有人想到了C++里面不是有异常捕获吗?是的,为了增加代码的兼容性,C++采用了下面的代码来捕获异常:
throw 抛出异常; try { //可能发生异常的代码 } catch (异常类型) { //发生异常后的处理方法 }
上面的代码进行这样处理不就没事了吗?
void Test() { int *p = new int(1); try { if (1) { throw 1; } } catch (int e) { delete p; throw; } delete p; }
但是这里在catch中却二次抛出异常,这样管理起来非常混乱。所以就引入了智能指针,用它来解决异常更方便。上面提到的RAII就是编写异常安全代码的关键思想。
来介绍一下Boost库里的智能指针吧。
本文出自 “Stand out or Get out” 博客,请务必保留此出处http://jiazhenzhen.blog.51cto.com/10781724/1760193
原文地址:http://jiazhenzhen.blog.51cto.com/10781724/1760193