boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr. 
这其中,我最喜欢,使用最多的是shared_ptr,也最让人随心所欲. 
使用很简单,如下: 
头文件 <boost/shared_ptr.hpp> 
class A 

  virtual void process(); 

boost::shared_ptr<A> test(new A); 
boost::shared_ptr通过重载->(返回传入的指针),test的使用就如同一个指针。其实test是一个对象。 
当发生引用时,boost::shared_ptr<A> test1 = test; test1与test共享构造的A指针,引用计算加一。当析够发生时,计算器减一,当计数器为0,删除内嵌指针。

常用的boost::shared_ptr函数有: 
get() 获取裸指针 
reset() 计数器减一

另外,boost::shared_ptr可以方便的和std::vector配合,除了不用担心节点的野指针等问题,还有一个比较有意思的功能。 
class B : public A 

virtual void process(); 
void do(); 

std::vector< boost::shared_ptr<A> > vect; 
boost::shared_ptr<B> node = boost::shared_ptr<B>(new B); 
vect.push_back(node); 
vect[0]->do(); //可以很方便的访问B::do(),要知道do()并不是A的方法。 
boost::shared_ptr有个一个缺点,就是不能从this指针构造。在boost库中,提供了一个解决方案。 
#include <boost/enable_shared_from_this.hpp> 
class C: public boost::enable_shared_from_this<C> // 


这个情况出现在什么时候呢,如: 
class D 

public: 
void Go(boost::shared_ptr<C> &d); 

而D的Go方法在C中被使用,这个时候,就需要从this指针构造C的智能指针(boost::shared_from_this()方法提供)。当然,这种方法有一个前提,那就是C在外部的形态也是智能指针。

最后,对所有智能指针做一下简单的介绍吧。 
auto_ptr 标准库中的智能指针。但是会转移所有权,如a = b时;内嵌的指针转移到b,智能指针a访问内嵌的指针则为空。 
scoped_ptr 与auto_ptr类似,但是不允许复制; 
intrusive_ptr是shared_ptr侵入式版本。使用情况,内部以及编写好了自己的内部引用计算器的代码,而又没有时间重写它。intrusive_ptr可以从this构造。 
weak_ptr是智能指针shared_ptr的观察者。

最新文章

  1. 我刚知道的WAP app中meta的属性
  2. 手写PE文件(一)
  3. c语言typedef的用法-解惑阿!很多天书般的东西解释的不错(转)
  4. HDOJ 2680 Dijkstra
  5. 将数据库的数据导入solr索引库中
  6. VBS调用keybd_event事件
  7. T4 代码生成 Demo (抽奖程序)
  8. 201521123101 《Java程序设计》第7周学习总结
  9. CF700E E. Cool Slogans
  10. (二)文档请求不同源之location.hash跨域
  11. 运维面试题之k8s
  12. 利用window.name+iframe跨域获取接口数据
  13. LeetCode1-5题
  14. centos7 端口3306无法连接问题
  15. CSS Modules 与 scoped 的不一样
  16. 关于wordpress更新提示无法创建目录问题
  17. 理解HTTP协议(转载)
  18. 【maven】之打包war依赖子项目jar
  19. [python]如何理解uiautomator里面的 instance 及使用场景
  20. 是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?

热门文章

  1. centos7/redhat7 将网卡名字改成eth样式的方法
  2. unity之uv贴图画圆弧,圆弧面,不规则图形
  3. MacOS + Linux + Nginx
  4. 转:requirejs:让人迷惑的路径解析(~~不错)
  5. Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
  6. nginx的 CPU参数worker_processes和worker_cpu_affinity使用说明
  7. 基于visual Studio2013解决C语言竞赛题之0205位数求和
  8. java学习之网络编程之echo程序
  9. pxe网络安装操作系统 原理与详细过程
  10. js php xmlrequest 上传图片