智能指针和异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能指针和异常相关的知识,希望对你有一定的参考价值。

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

以上是关于智能指针和异常的主要内容,如果未能解决你的问题,请参考以下文章

空指针异常 - 片段活动

活动到片段通信:当我尝试从活动更新片段中的文本视图时,出现空指针异常

片段中的 Listview 适配器给出空指针异常

rootView上的Android片段空指针异常[关闭]

C++ - 指针和“智能指针”

片段中的空指针异常