码迷,mamicode.com
首页 > 其他好文 > 详细

智能指针和异常

时间:2016-04-04 21:07:08      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:智能指针   raii   定置删除器   循环引用   

今天让我们来分析一下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

智能指针和异常

标签:智能指针   raii   定置删除器   循环引用   

原文地址:http://jiazhenzhen.blog.51cto.com/10781724/1760193

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!