在你的代码中使用Boost智能指针SmartPointerstoboostyourcode(Bypeterchen)翻译masterlee Downloadsourcefiles- 正文 智能指针能够使C++的开发简单化,主要是它能够像其它限制性语言(如C#、VB)自动管理内存的释放,而且能够做更多的事情。1、什么是智能指针智能指针是一种像指针的C++对象,但它能够在对象不使用的时候自己销毁掉。我们知道在C++中的对象不再使用是很难定义的,因此C++中的资源管理是很复杂的。各种智能指针能够操作不同的情况。当然,智能指针能够在任务结束的时候删除对象,除了在程序之外。许多库都提供了智能指针的操作,但都有自己的优点和缺点。Boost库是一个高质量的开源的C++模板库,很多人都考虑将其加入下一个C++标准库的版本中。 Boost提供了下面几种智能指针:shared_ptr<T>本指针中有一个引用指针记数器,表示类型T的对象是否已经不再使用。shared_ptr是Boost中提供普通的智能指针,大多数地方都使用shared_ptr。scoped_ptr<T>当离开作用域能够自动释放的指针。因为它是不传递所有权的。事实上它明确禁止任何想要这样做的企图!这在你需要确保指针任何时候只有一个拥有者时的任何一种情境下都是非常重要的。intrusive_ptr<T>比shared_ptr更好的智能指针,但是需要类型T提供自己的指针使用引用记数机制。weak_ptr<T>一个弱指针,帮助shared_ptr避免循环引用。shared_array<T>和shared_ptr类似,用来处理数组的。scoped_array<T>和scoped_ptr类似,用类处理数组的。 下面让我们看一个简单的例子: 2、首先介绍:boost::scoped_ptr<T>scoped_ptr是Boost提供的一个简单的智能指针,它能够保证在离开作用域后对象被释放。例子说明:本例子使用了一个帮助我们理解的类:CSample,在类的构造函数、赋值函数、析构函数中都加入了打印调试语句。因此在程序执行的每一步都会打印调试信息。在例子的目录里已经包含了程序中需要的Boost库的部分内容,不需要下载其它内容(查看Boost的安装指南)。 下面的例子就是使用scoped_ptr指针来自动释放对象的:使用普通指针使用scoped_ptr指针voidSample1_Plain(){ CSample*pSample(newCSample); if(!pSample->Query()) //justsomefunction... { deletepSample; return; } pSample->Use(); deletepSample;}#include"boost/" voidSample1_ScopedPtr(){ boost::scoped_ptr<CSample> samplePtr(newCSample); if(!samplePtr->Query()) //justsomefunction... return; samplePtr->Use(); }使用普通普通指针的时候,我们必须记住在函数退出的时候要释放在这个函数
《智能指针》 来自淘豆网www.taodocs.com转载请标明出处.