boost 智能指针

最近使用boost的智能指针,查看了一些帖子。总结如下:

智能指针分类:http://developer.51cto.com/art/201012/239004.htm

智能指针使用注意事项:http://blog.sina.com.cn/s/blog_45497dfa0101egbu.html

多线程安全性分析:http://blog.csdn.net/jiangfuqiang/article/details/8292906

                                 http://my.oschina.net/costaxu/blog/103119  (这个帖子的结论很好,

                                                   1 shared_ptr是一个非常实用的智能指针。

                                                   2 shared_ptr的实现机制是在拷贝构造时使用同一份引用计数。

                                                   3 对同一个shared_ptr的写操作不是线程安全的。 对使用同一份引用计数的不同shared_ptr是线程安全的。

                                                   )

封装有基类、子类的智能指针类型转换:http://blog.csdn.net/bopzhou/article/details/6748763

                                                                 http://blog.csdn.net/clever101/article/details/6950050


经过几天的试用,最终决定放弃在系统中使用boost::shared_ptr<T>.原因如下:

1.因为boost::shared_ptr<T>是以boost::shared_ptr<T>(T* p)建立智能指针,调用两次就会生成对于T* p的两个引用计数,比较危险。

2.总有情况需要将类内使用boost::shared_ptr<T>保存的对象取出,如果返回指针,出现情况1.如果返回boost::shared_ptr<T>引用,又存在A是T的子类,boost::shared_ptr<T>和boost::shared_ptr<A>互转的情况,很麻烦,而且处理不好很容易出错,对于使用系统的用户使用是个很不好的选择。

3.总有情况是对象要返回自身的智能指针(以this参数)。这时会返回boost::shared_ptr<Edge>(this),结果依据第一个原因,这种情况一定会生成两个计数,也就一定会出错。

所以boost::shared_ptr<T>这种非插入式(辅助式)只适合小范围、局部使用。插入式(句柄)指针才适合系统使用(上些大型的c++开源库,如vtk/osg均使用此方法)。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值