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的观察者。

转载于:https://www.cnblogs.com/weizhixiang/p/5795555.html

初识boost之boost::share_ptr用法相关推荐

  1. boost::mpl::always相关用法的测试程序

    boost::mpl::always相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::always相关用法的测试程序 C++实现代码 #include <boost ...

  2. boost::mpl::advance相关用法的测试程序

    boost::mpl::advance相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::advance相关用法的测试程序 C++实现代码 #include <boo ...

  3. boost::mpl::inherit_linearly相关用法的测试程序

    boost::mpl::inherit_linearly相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpl::inherit_linearly相关用法的测试程序 C++实现代 ...

  4. boost::mpi::wait_any相关用法的测试程序

    boost::mpi::wait_any相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpi::wait_any相关用法的测试程序 C++实现代码 #include <s ...

  5. boost::mpi::wait_all相关用法的测试程序

    boost::mpi::wait_all相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpi::wait_all相关用法的测试程序 C++实现代码 #include <b ...

  6. boost::mpi::cartesian_topology相关用法的测试程序

    boost::mpi::cartesian_topology相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpi::cartesian_topology相关用法的测试程序 C+ ...

  7. boost::mpi::cartesian_communicator相关用法的测试程序

    boost::mpi::cartesian_communicator相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mpi::cartesian_communicator相关用法 ...

  8. boost::mp11::tuple_transform相关用法的测试程序

    boost::mp11::tuple_transform相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mp11::tuple_transform相关用法的测试程序 C++实现代 ...

  9. boost::mp11::tuple_for_each相关用法的测试程序

    boost::mp11::tuple_for_each相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mp11::tuple_for_each相关用法的测试程序 C++实现代码 ...

  10. boost::mp11::tuple_apply相关用法的测试程序

    boost::mp11::tuple_apply相关用法的测试程序 实现功能 C++实现代码 实现功能 boost::mp11::tuple_apply相关用法的测试程序 C++实现代码 #if de ...

最新文章

  1. DataGrid鼠标事件方法
  2. 汇编和python-PyAsm-在python中嵌入汇编 | 学步园
  3. 对于生活我选择了无奈
  4. 墓志铭:非常了得其实早已死了
  5. Promolike Qualtrics Dashboard
  6. flowable 开源项目
  7. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(一)(转)
  8. 不同用户登陆模块的实现
  9. cnblogs用户体验评价
  10. ENVI实验教程(2)遥感图像预处理—辐射校正
  11. HTML小游戏7 —— 《罗斯魔影》魔法消除游戏(附完整源码)
  12. 用TEXT函数解决日期用连接字符日期变成数字格式的问题
  13. python从入门到实践十二章
  14. 建筑师们终于在虚拟空间开双年展了! | 绿洲 · 虚拟现实专栏
  15. 湖南方言之王——湘乡话
  16. Oracle中日期函数的使用
  17. python的数学建模库_数学建模库
  18. 2019最新《布尔教育php设计模式项目实战 共17课》
  19. MySQL高可用之基于Galera复制跨地域节点分布的滥用
  20. pycharm重命名后无法运行(报错: can‘t open file......No such file or directory)

热门文章

  1. CTFshow php特性 web96
  2. Bzoj 3680 吊打xxx【[模拟退火】
  3. MPI常用函数速查表
  4. pascal--生成Pascal矩阵
  5. opencv 线性滤波器
  6. QQ音乐爬取(python实现)
  7. linux sybase系统,linux sybase 安装全过程(写给初学者)
  8. 【画出漂亮的电路图】CircuiTikZ库学习第一天
  9. Mysql data type
  10. python + MySql 基本操作